ネストされたオブジェクト メンバーにアクセスするのにかかる時間を説明するために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
計算されます。NaN
1
undefined
問題は、属性obj.one.two.three.four
がないことです。value
その 1 つのケースでは、JavaScript は、最終的に に割り当てる前に、欠落している属性を探してプロトタイプ チェーンをトラバースしNaN
ますsum
。
私はあなたのテストを修正しました。'four'の値フィールドがありませんでした。また、より良い値を取得するために、テストに書き込みプロセスを追加しました。 ここで、修正されたjsperfテストを取得しました