Javascript JS对象中键(字符串)的长度有限制吗?
所以我们有一个例子,我们有一个对象,其中key是id(int),value是字符串。但我们注意到,大多数情况下,我们根据字符串查找id,因此我们决定将其反转,并将字符串作为键,值就是id。因为这样,我们不必遍历每个项并比较值,只需执行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
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就是其中之一。只是为了给其他人增加一些小的清晰度。这意味着您无法执行更改字符串的操作。您可以操作并返回一个新字符串,但决不能实际更改接受的字符串