Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS对象中键(字符串)的长度有限制吗?_Javascript_Android_Android Webview_Javascript Objects - Fatal编程技术网

Javascript JS对象中键(字符串)的长度有限制吗?

Javascript JS对象中键(字符串)的长度有限制吗?,javascript,android,android-webview,javascript-objects,Javascript,Android,Android Webview,Javascript Objects,所以我们有一个例子,我们有一个对象,其中key是id(int),value是字符串。但我们注意到,大多数情况下,我们根据字符串查找id,因此我们决定将其反转,并将字符串作为键,值就是id。因为这样,我们不必遍历每个项并比较值,只需执行var id=storage[text]。下面是我们所做的例子 下面是旧实现的示例: var storage = { 0 : null, 1 : "Hello", 2 : "world!", 3 : "How are you?" } var sto

所以我们有一个例子,我们有一个对象,其中key是id(int),value是字符串。但我们注意到,大多数情况下,我们根据字符串查找id,因此我们决定将其反转,并将字符串作为键,值就是id。因为这样,我们不必遍历每个项并比较值,只需执行
var id=storage[text]。下面是我们所做的例子

下面是旧实现的示例:

var storage = {
  0 : null,
  1 : "Hello",
  2 : "world!",
  3 : "How are you?"
}
var storage = {
  "null" : 0,
  "Hello" : 1,
  "world!" : 2,
  "How are you?" : 3
}
以下是新实现的示例:

var storage = {
  0 : null,
  1 : "Hello",
  2 : "world!",
  3 : "How are you?"
}
var storage = {
  "null" : 0,
  "Hello" : 1,
  "world!" : 2,
  "How are you?" : 3
}
我知道现在字符串是键,可以为相同的字符串获取相同的id。但是由于现在字符串可能相当大(可能性很小,但每个字符串可能最多1KB),JS或Android webview对对象键有长度限制吗?


而且,这种实现有缺点吗?到目前为止,我还没有注意到任何问题,但您永远也不会知道。

不,字符串长度没有限制(只要它适合内存),而且您的实现看起来也不错。使用例如布尔值的“反转”数组非常常见。
至于作为键的字符串:字符串是存储在特定地址的不可变符号,实际用作数组索引的是该地址(又名指针又名引用),而不是字符串本身。

不,字符串长度没有限制(只要它适合内存),你的实现看起来也不错。使用例如布尔值的“反转”数组非常常见。
至于作为键的字符串:字符串是存储在特定地址的不可变符号,实际用作数组索引的是该地址(又名指针又名引用),而不是字符串本身。

我对此进行了一些研究

在这个问题上,规范(,)也是如此。它们只声明属性访问器必须是字符串,没有任何限制——换句话说,就规范而言没有限制。这并不奇怪

浏览器如何处理则是另一回事。我已经在许多浏览器中设置并运行了它。Chrome40(桌面)、Chrome40(Android 5.1)、Firefox36、Opera27和IE9+可以处理多达227个字符的属性名称。Safari 8(OS X Yosemite)甚至可以处理230个字符的属性名

对于除IE之外的所有浏览器,最大属性长度与最大字符串长度相同。IE9+可以处理大约230个字符的最大字符串长度,但是对象键的限制是227个字符,就像在其他浏览器中一样

该测试在IE8和iOS上的Safari中不起作用,可能是由于测试代码引起的内存问题


简言之,使用长的属性名是安全的,即使在极端情况下也是如此。只要字符串本身在浏览器可以处理的范围内,您也可以将其用作属性名。

我对此进行了一些研究

在这个问题上,规范(,)也是如此。它们只声明属性访问器必须是字符串,没有任何限制——换句话说,就规范而言没有限制。这并不奇怪

浏览器如何处理则是另一回事。我已经在许多浏览器中设置并运行了它。Chrome40(桌面)、Chrome40(Android 5.1)、Firefox36、Opera27和IE9+可以处理多达227个字符的属性名称。Safari 8(OS X Yosemite)甚至可以处理230个字符的属性名

对于除IE之外的所有浏览器,最大属性长度与最大字符串长度相同。IE9+可以处理大约230个字符的最大字符串长度,但是对象键的限制是227个字符,就像在其他浏览器中一样

该测试在IE8和iOS上的Safari中不起作用,可能是由于测试代码引起的内存问题


简言之,使用长的属性名是安全的,即使在极端情况下也是如此。只要字符串本身在浏览器可以处理的范围内,您也可以将其用作属性名。

似乎在ECMAScript 2016中,这个问题现在有了明确的答案。根据报告:

ECMAScript 2016(第7版)确定了2^53-1个元素的最大长度。以前,没有指定最大长度

您还可以在以下文件中找到指定的:

字符串类型是零或多个16位无符号整数值(“元素”)的所有有序序列的集合,最大长度为253-1个元素


似乎对于ECMAScript 2016,这个问题现在有了一个明确的答案。根据报告:

ECMAScript 2016(第7版)确定了2^53-1个元素的最大长度。以前,没有指定最大长度

您还可以在以下文件中找到指定的:

字符串类型是零或多个16位无符号整数值(“元素”)的所有有序序列的集合,最大长度为253-1个元素


“字符串是不可变的符号”:你从哪里学来的?很有趣。您可以添加引用或源吗?在许多语言中,字符串是不可变的。Javascript就是其中之一。只是为了给其他人增加一些小的清晰度。这意味着您无法执行更改字符串的操作。你可以操作并返回一个新的字符串,但不能实际更改。接受的答案更实用,但这是真正的答案。“字符串是不可变的符号”:你从哪里学来的?很有趣。您可以添加引用或源吗?在许多语言中,字符串是不可变的。Javascript就是其中之一。只是为了给其他人增加一些小的清晰度。这意味着您无法执行更改字符串的操作。您可以操作并返回一个新字符串,但决不能实际更改接受的字符串