有没有对JS对象的键(串)的长度有限制吗?(Is there a limit on length o

2019-07-03 19:32发布

因此,我们不得不在那里,我们将有一个对象,其中关键的是ID(int)和值是字符串的情况下。 但是,我们注意到,大部分的时间,我们期待了基于字符串的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
}

据我所知,现在的字符串是关键,它的确定以获得相同的ID为同一字符串。 但是,由于现在的字符串可以是潜在的巨大蛮(渺茫的机会,但每串可能最大1KB), 有没有长度限制JS或Android的WebView穿的对象键?

而且,这是否实施有缺点? 我还没有发现任何问题,到目前为止,但你永远不知道。

Answer 1:

我研究这一点。

MDN是无声的问题,所以是规范( ES5 , ES6 )。 他们只指出属性访问必须是一个字符串,没有任何资格 - 换句话说,是没有限制的,只要规范而言。 这是不足为奇的。

浏览器如何处理它,则是另一回事。 我已经建立了一个测试 ,并在多个浏览器上运行它。 铬40(桌面),铬40(的Android 5.1),火狐36,歌剧27和IE9 +可以处理高达2 27个字符的属性名。 Safari浏览器8(OS X约塞米蒂)甚至可以处理的2 30个字符的属性名。

对于除IE所有这些浏览器中,最大长度属性是相同的最大字符串长度。 IE9 +可以处理的2〜30个字符的最大字符串长度,但对于对象键的极限是在2 27个字符,就如同在其他浏览器。

测试没有在IE8和Safari工作在iOS上,大概是由于所造成的测试代码内存问题。

简单地说,它是安全的它采取了极端,即使使用长属性名。 只要字符串本身留下的是什么浏览器可以处理的范围内,你可以用它们作为属性名称为好。



Answer 2:

没有,是字符串长度没有限制(只要它适合到内存),以及您的实现似乎还好过。 这实际上可以很常见的那些“转身”阵列,例如布尔值。 而作为该字符串作为键:字符串是存储在某个地址不变的符号,什么实际作为,数组的索引是该地址(又名指针又名参考),而不是字符串本身。



Answer 3:

这看起来好像与ECMAScript的2016年,现在有一个明确的回答这个问题。 按照上string.length减MDN的Web文档 :

ECMAScript的2016(编7)成立2 ^ 53个的最大长度 - 1元件。 以前,没有指定的最大长度。

您还可以找到这在指定ECMAScript®2016语言规范 :

String类型是高达2组53 -1的元素的最大长度设定零个或多个16位无符号整数值(“元素”)的所有有序序列。



文章来源: Is there a limit on length of the key (string) in JS object?