JavaScript属性访问的性能特征是什么(在当前实现上)?
如果我使用一个对象作为哈希表(使用字符串键),我可以安全地假设O(1)或O(log n)访问时间吗?
是否有任何常见的浏览器或环境比其他浏览器或环境明显更快/更慢,我应该留意?
JavaScript标准有什么要说的吗?
最重要的是:
JavaScript中的每个对象都实现为对象哈希,因此没有功能差异.
例如,看看这个测试:
var arr = [];
arr[5] = 5;
arr['5'] = 'not 5';
console.log(arr.length, arr);
// output: 6 [undefined, undefined, undefined, undefined, undefined, "not 5"]
Run Code Online (Sandbox Code Playgroud)
用作职位时,数字会被字符串化.
有关更多信息,请参阅Crockford的有关JavaScript 的网站.特别重要的部分是在"阵列"标题下:
Arrays in JavaScript are also hashtable objects.
性能不是真正的问题,除非你有大量的对象要跟踪(如500,000+),在这种情况下你可能做错了.
你可以做一些优化,但除非你用JavaScript做一些不自然的事情(比如压缩算法......我在JS中使用LZMA实现......糟糕的想法),它们真的没有意义.
注意:
如果你有一个备用集(就像你只定义10,000个中的10个索引一样),你可能应该使用常规对象.数组会将所有10,000个索引初始化为"未定义",而Object.keys(obj)只会报告您设置的10 个索引.这是一个实际上有意义的次要优化.