3

ネストされたオブジェクト メンバーにアクセスするのにかかる時間を説明するためにjsperfを作成していたところ、この奇妙な現象が見つかりました。何らかの理由で、4 番目にネストされたオブジェクト メンバーのテスト実行は、5 番目よりも大幅に遅くなります。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計算されます。NaN1undefined

于 2013-03-14T17:26:37.150 に答える
1

問題は、属性obj.one.two.three.fourがないことです。valueその 1 つのケースでは、JavaScript は、最終的に に割り当てる前に、欠落している属性を探してプロトタイプ チェーンをトラバースしNaNますsum

于 2013-03-14T17:26:32.137 に答える
0

私はあなたのテストを修正しました。'four'の値フィールドがありませんでした。また、より良い値を取得するために、テストに書き込みプロセスを追加しました。 ここで、修正されたjsperfテストを取得しました

于 2013-03-14T17:31:31.413 に答える