ネストされたオブジェクト メンバーにアクセスするのにかかる時間を説明するためにjsperfを作成していたところ、この奇妙な現象が見つかりました。何らかの理由で、4 番目にネストされたオブジェクト メンバーのテスト実行は、5 番目よりも大幅に遅くなります。Chrome と Firefox でこれを試しましたが、同じ結果が得られました。

なぜこれが起こるのでしょうか?
ネストされたオブジェクト メンバーにアクセスするのにかかる時間を説明するためにjsperfを作成していたところ、この奇妙な現象が見つかりました。何らかの理由で、4 番目にネストされたオブジェクト メンバーのテスト実行は、5 番目よりも大幅に遅くなります。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計算されます。NaN1undefined
問題は、属性obj.one.two.three.fourがないことです。valueその 1 つのケースでは、JavaScript は、最終的に に割り当てる前に、欠落している属性を探してプロトタイプ チェーンをトラバースしNaNますsum。
私はあなたのテストを修正しました。'four'の値フィールドがありませんでした。また、より良い値を取得するために、テストに書き込みプロセスを追加しました。 ここで、修正されたjsperfテストを取得しました