ホームページ > ウェブフロントエンド > jsチュートリアル > == は true ですが、{} === {} は false である理由。

== は true ですが、{} === {} は false である理由。

Linda Hamilton
リリース: 2025-01-19 08:33:10
オリジナル
483 人が閲覧しました

Why == s true but {} === {} is false.

JavaScript の厳密等価演算子 (===) は一見すると単純に見えますが、状況によっては混乱する可能性があります。 1 === 1true を返すのに対し、{} === {}false を返す理由を調べてみましょう。

記憶メカニズム: プリミティブ値とオブジェクト

この動作を理解するには、JavaScript がメモリ内の 生の値オブジェクト をどのように処理するかを理解する必要があります。

元の値

プリミティブ値には、数値、文字列、ブール値、undefinednull、記号が含まれます。 === を使用して 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 === 1true を返し、オブジェクトは参照で比較するため、{} === {}false を返すということです。これをマスターすると、JavaScript の機能と複雑さをより深く理解できるようになります。

以上が== は true ですが、{} === {} は false である理由。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート