ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript で「console.log()」が予期しない配列の動作を示すのはなぜですか?
配列を使用した console.log() の予期しない動作
JavaScript では、配列を検査するときに console.log() 関数が予期しない動作をします。この動作は、console.log() に値のコピーではなく、配列への 参照 が渡されることが原因です。
例:
var A = [2, 1]; var C = A; console.log(C); // [1, 2] A.sort(); console.log(C); // [1, 2]
配列 A をソートするとき、C の値は変更されないことが期待されます。しかし、そうではありません。 C の値もソートされた配列 [1, 2] に変更されます。
なぜこれが起こるのですか?
console.log() に参照が渡されるためです。配列に加えられたすべての変更は、C が保持する参照にも反映されます。したがって、A がソートされると、C の出力も反映されます。
この動作を回避する方法:
この予期しない動作を回避するには、次の回避策を使用できます:
console.log(JSON.parse(JSON.stringify(C)))
これは変換しますJSON.stringify() を使用して配列 C を文字列に変換し、JSON.parse() を使用して配列に戻します。これにより、配列のディープ コピーが効果的に作成され、元の配列に加えられた変更がコピーに反映されないようになります。
ブラウザの警告:
次のことが重要です。 Mozilla Developer Network (MDN) は、Chrome および Firefox の最近のバージョンでのこの動作について次のように警告しています。
「次の点にご注意ください。」 Chrome と Firefox の最新バージョンでオブジェクトをログに記録する場合、コンソールに記録されるのはオブジェクトへの参照であり、console.log() を呼び出した時点でのオブジェクトの「値」とは限りません。ただし、それはコンソールを開いた瞬間のオブジェクトの値です。"
以上がJavaScript で「console.log()」が予期しない配列の動作を示すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。