)が期待どおりに機能しない理由。 この動作を理解するために、JavaScriptの内部作業を掘り下げます。
===
JavaScriptは、原始的なデータ型と非適合性データ型を区別します。 プリミティブタイプ(ブール、ヌル、未定義、文字列、数)は値で渡されますが、非プリミティブタイプ(配列、関数、オブジェクト - すべて技術的にオブジェクト)は参照によって渡されます。
プリミティブタイプの動作(値ごとに合格)プリミティブ変数を宣言すると、値は直接保存されます。
非プリミティブタイプの動作(参照による合格) 非プリミティブ変数は、オブジェクト自体ではなく、オブジェクトのメモリの位置に参照を保存します:
は、空の配列を指して参照(メモリアドレスh001など)を保持します。 リファレンスコピー
を使用して参照変数をコピーすると、オブジェクトのデータではなくリファレンスをコピーします。
の両方が同じメモリの位置を指します。 一方を変更すると、もう一方の変更が変更されます。
元のオブジェクトはメモリのままですが、は新しいオブジェクトを指しています
アレイとオブジェクトで失敗する
。 プリミティブ値を関数に渡すと、値がコピーされます。 ただし、通過するオブジェクトは参照を渡します。 この区別は、純粋な機能と不純な機能を理解するために重要です。
不純な関数:関数の範囲外の元のオブジェクトに影響を与える引数として渡されたオブジェクトを変更できます。
オブジェクトを変更する純粋な関数を作成するには、変更前にコピーを作成します。
リファレンスコピーを理解することは、予測可能で保守可能なコードを書くために不可欠です。
JavaScriptメモリ管理に深く掘り下げるには、コールスタックとメモリヒープを探索してください。const name = 'John';
const age = 25;
fruits
の後、H001での配列が変更されます。push()
=
const fruits = [];
fruits.push('Banana');
fruits
yellowFruits
「パイナップル」を追加してyellowFruits
参照変数の再割り当て<
fruits
参照変数を再割り当てすると、新しいリファレンスが作成されます:const fruits = ['Banana'];
const yellowFruits = fruits;
{ name: 'John' }
person
{ name: 'Mary' }
===
と===
になります。
let person = { name: 'John' };
person = { name: 'Mary' };
arr1
arr3
false
純粋な関数:const arr1 = ['1'];
const arr2 = arr1; // Same reference
console.log(arr1 === arr2); // true
const arr3 = ['1']; // Different reference
console.log(arr1 === arr3); // false
以上がアレイとオブジェクトを===と比較できないのはなぜですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。