3

我正在构建一个jsperf来说明访问嵌套对象成员所花费的时间,我发现了这个奇怪的现象。出于某种原因,第四个嵌套对象成员的测试运行速度比第五个要慢得多。我已经在 Chrome 和 Firefox 中尝试过,并且得到了相同的结果。

在此处输入图像描述

任何想法为什么会发生这种情况?

4

3 回答 3

5

你的对象是这个,我的评论补充说:

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时添加1undefined.

于 2013-03-14T17:26:37.150 回答
1

问题是obj.one.two.three.four没有value属性。NaN在那种情况下,JavaScript 在最终分配给之前遍历原型链寻找缺失的属性sum

于 2013-03-14T17:26:32.137 回答
0

我修复了你的测试。您没有“四”的值字段。我还在测试中添加了一个写入过程以获得更好的值; 在这里你得到了固定的 jsperf 测试

于 2013-03-14T17:31:31.413 回答