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