JavaScript の厳密等価演算子 (===) は一見すると単純に見えますが、状況によっては混乱する可能性があります。 1 === 1
が true
を返すのに対し、{} === {}
は false
を返す理由を調べてみましょう。
この動作を理解するには、JavaScript がメモリ内の 生の値 と オブジェクト をどのように処理するかを理解する必要があります。
プリミティブ値には、数値、文字列、ブール値、undefined
、null
、記号が含まれます。 ===
を使用して 2 つのプリミティブ値を比較する場合、JavaScript はそれらの 値 が同じかどうかをチェックします。 1 === 1
内の 2 つの 1
は同じ値を参照しているため、比較の結果は true
になります。
オブジェクトはより複雑です。これらはヒープと呼ばれる特別なメモリ領域に保存されます。オブジェクトが作成されるたびに、ヒープ内に新しいメモリ位置が取得されます。 ===
を使用してオブジェクトを比較すると、JavaScript は 2 つのオブジェクトが 同じメモリ位置 を参照しているかどうかをチェックします。 {}
と {}
はメモリ内に作成された 2 つの異なるオブジェクトであり、同じメモリ位置を共有しないため、{} === {}
の結果は false
になります。
以下は簡略化した図です:
const obj1 = {}; // 在内存位置 A 创建 const obj2 = {}; // 在内存位置 B 创建 console.log(obj1 === obj2); // false,因为 A !== B const obj3 = obj1; // obj3 指向与 obj1 相同的位置 console.log(obj1 === obj3); // true,因为两者都指向 A
この違いは、オブジェクトが 参照型 であるためです。つまり、比較では内容ではなく参照が同一であるかどうかがチェックされます。
typeof
を使用して値の型を確認しますJavaScript の typeof
演算子は、値の型を理解するのに役立ちます。使用方法は次のとおりです:
console.log(typeof "hello"); // "string" console.log(typeof 42); // "number" console.log(typeof true); // "boolean" console.log(typeof undefined);// "undefined" console.log(typeof null); // "object" (已知的 bug!) console.log(typeof {}); // "object" console.log(typeof []); // "object" console.log(typeof function () {}); // "function"
null
および配列はオブジェクトです何か奇妙なことに気づくかもしれません: typeof null
「オブジェクト」を返します。これは JavaScript の歴史的なバグであり、Web を破壊することなく修正することはできません。ただし、配列と関数は実際には内部のオブジェクトです。
関数は確かにオブジェクトですが、[[Call]]
という 1 つの固有のプロパティを持っています。この内部プロパティにより呼び出し可能になるため、次のように呼び出すことができます:
function greet() { console.log("Hello!"); } greet(); // "Hello!"
プリミティブ値とオブジェクトの違いを理解することは、堅牢な JavaScript コードを作成するために重要です。オブジェクトを比較するときに、その内容を比較する場合は、詳細な等価性チェックを使用します。例:
const objA = { name: "Alice" }; const objB = { name: "Alice" }; // 浅比较 console.log(objA === objB); // false // 深度比较 const isEqual = JSON.stringify(objA) === JSON.stringify(objB); console.log(isEqual); // true
重要なのは、プリミティブは値で比較するため、1 === 1
は true
を返し、オブジェクトは参照で比較するため、{} === {}
は false
を返すということです。これをマスターすると、JavaScript の機能と複雑さをより深く理解できるようになります。
以上が== は true ですが、{} === {} は false である理由。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。