ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript で「console.log()」が予期しない配列の動作を示すのはなぜですか?

JavaScript で「console.log()」が予期しない配列の動作を示すのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-14 05:23:10273ブラウズ

Why Does `console.log()` Show Unexpected Array Behavior in JavaScript?

配列を使用した 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。