我正在构建一个jsperf来说明访问嵌套对象成员所花费的时间,我发现了这个奇怪的现象。出于某种原因,第四个嵌套对象成员的测试运行速度比第五个要慢得多。我已经在 Chrome 和 Firefox 中尝试过,并且得到了相同的结果。
任何想法为什么会发生这种情况?
我正在构建一个jsperf来说明访问嵌套对象成员所花费的时间,我发现了这个奇怪的现象。出于某种原因,第四个嵌套对象成员的测试运行速度比第五个要慢得多。我已经在 Chrome 和 Firefox 中尝试过,并且得到了相同的结果。
任何想法为什么会发生这种情况?
你的对象是这个,我的评论补充说:
var obj = {
"one": {
"two": {
"three": {
"four": {
"five": {
"value": 0
}
/* MISSING "value": 0 */
},
"value": 0
},
"value": 0
},
"value": 0
},
"value": 0
};
};
然而,键上的对象"four"
没有"value"
键,因此显然 JavaScript 引擎必须做额外的工作来处理这种情况:错过对对象的键查找,错过对对象的键查找对象的原型Object
,返回undefined
,然后计算NaN
时添加1
到undefined
.
问题是obj.one.two.three.four
没有value
属性。NaN
在那种情况下,JavaScript 在最终分配给之前遍历原型链寻找缺失的属性sum
。
我修复了你的测试。您没有“四”的值字段。我还在测试中添加了一个写入过程以获得更好的值; 在这里你得到了固定的 jsperf 测试