console.log() 配列参照の変更を即座にエコーします
JavaScript では、数値や文字列などのプリミティブな値を保持する変数は値によって渡されます、オブジェクトを含むものは参照によって渡されます。この違いは、配列を操作するときに明らかになります。
次のコードを考えてみましょう:
var A = [2, 1]; var C = A; console.log(C); // [1, 2] A.sort(); console.log(C); // [1, 2]
この例では、C に配列 A への参照が割り当てられます。A が並べ替えられると、変更は次のようになります。 A が再度アクセスされる前であっても、すぐに C に反映されます。
これはなぜ発生しますか?プリミティブ値とは異なり、オブジェクトはヒープに割り当てられます。つまり、オブジェクトはコンピュータのメモリ内に存在し、参照を通じてアクセスされます。 C をログに記録すると、console.log() は配列の内容のコピーではなく、配列への参照を出力します。したがって、参照されたオブジェクトに対する後続の変更 (この場合、配列のソート) も、A が再度使用される前にコンソールに表示されます。
この動作を回避し、オブジェクトのスナップショットをログに記録するには、 console.log() が呼び出される瞬間に、次のトリックを使用できます:
console.log(JSON.parse(JSON.stringify(C)));
このテクニックは、JSON シリアル化を使用してオブジェクトのディープ コピーを作成し、逆シリアル化。
以上がJavaScript で「console.log()」が配列の変更を即座に示すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。