She*_*zod 75 javascript android javascript-objects android-webview
所以我们有一个案例,我们会有一些JSON,其中key是id(int),值是字符串.但是我们注意到大多数时候,我们根据字符串查找id,所以我们决定将其反转并将字符串作为键,值为id.因为这样而不是遍历每个项目并比较值,我们可以这样做var id = storage[text];
.以下是我们所做的例子.
这是旧实现的示例:
var storage = {
0 : null,
1 : "Hello",
2 : "world!",
3 : "How are you?"
}
Run Code Online (Sandbox Code Playgroud)
以下是新实现的示例:
var storage = {
"null" : 0,
"Hello" : 1,
"world!" : 2,
"How are you?" : 3
}
Run Code Online (Sandbox Code Playgroud)
我知道现在字符串是键,并且可以为相同的字符串获取相同的id.但是从现在开始字符串可能非常巨大(机会很小,但每个字符串可能最大1KB),JS或Android webview是否存在长度限制对象键?
而且,这种实施有缺点吗?到目前为止我没有发现任何问题,但你永远都不知道.
has*_*nge 82
我对此进行了一些研究.
MDN对此问题保持沉默,规范也是如此(ES5,ES6).他们只声明属性访问者必须是一个字符串,没有任何资格 - 换句话说,就规范而言,没有限制.这并不奇怪.
浏览器如何处理它是另一回事.我已经设置了一个测试并在许多浏览器中运行它.Chrome 40(桌面),Chrome 40(Android 5.1),Firefox 36,Opera 27和IE9 +可以处理最多2 27个字符的属性名称.Safari 8(OS X Yosemite)甚至可以处理2 30个字符的属性名称.
对于IE以外的所有浏览器,最大属性长度与最大字符串长度相同.IE9 +可以处理最大字符串长度~2 30个字符,但对象键的限制为2 27个字符,就像在其他浏览器中一样.
该测试在iOS上的IE8和Safari中不起作用,可能是由于测试代码导致的内存问题.
简而言之,使用长属性名称是安全的,即使将其置于极端状态也是如此.只要字符串本身保持在浏览器可以处理的范围内,您也可以将它们用作属性名称.
Rid*_*lly 31
不,字符串长度没有限制(只要它适合内存),你的实现似乎也没关系.将这些"转向"数组与例如布尔值进行交换是很常见的.至于作为键的字符串:字符串是存储在某个地址的不可变符号,而实际用作数组索引的是该地址(也就是指针也称为引用),而不是字符串本身.
Fra*_*iak 10
似乎在 ECMAScript 2016 中,这个问题现在有了明确的答案。根据关于 string.length的MDN Web Docs:
ECMAScript 2016 (ed. 7) 建立了 2^53 - 1 个元素的最大长度。以前,没有指定最大长度。
您还可以在ECMAScript® 2016 语言规范中找到指定的内容:
String 类型是由零个或多个 16 位无符号整数值(“元素”)组成的所有有序序列的集合,最大长度为 2 53 -1 个元素。
归档时间: |
|
查看次数: |
48678 次 |
最近记录: |