2 回答
TA贡献1829条经验 获得超13个赞
然后我们检索值obj.keyY,那么它是否在那些对象键上一一查找以找到keyY?
这取决于实现,但即使在旧的 JavaScript 引擎中,答案是否定的,它比那要高效得多。对象属性访问是一个非常常见的操作,因此 JavaScript 引擎积极优化它,并且在这样做时非常复杂。
在现代 JavaScript 引擎中,对象通常被优化为即时生成的类机器代码,因此属性查找速度快得令人眼花缭乱。如果由于某种原因它们没有被优化(可能只是不经常使用),通常会使用像哈希表这样的结构,因此查找仍然比线性访问(查看每个属性)要好得多。
具有大量属性或随时间变化的属性的对象可能不如具有更合理数量的属性的对象优化得好。但它们至少会被优化(在任何模糊现代的事物中)到哈希表级别的访问时间。(FWIW:对于随着时间的推移具有不同属性的对象,首先使用 a 可能会更好Map
。)
虽然在学术上很有趣,但在编写代码时不要担心这一点,直到/除非你遇到性能问题,你追踪到缓慢的属性访问。(这是我在 ~20 年的 JavaScript 编码中从未有过的。:-))
TA贡献1805条经验 获得超9个赞
小基准:
//setup..
for(var obj = {}, i =0; i<1000000; obj['key'+i] = i++);
var a;
//find 1
console.time(1);
a = obj.key1;
console.timeEnd(1);
//find last
console.time(2);
a = obj.key999999;
console.timeEnd(2);
如您所见,它不是一个一个地查找
添加回答
举报