ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript が `===` 比較では 0 と -0 を等しいものとして扱うのに、`Object.is` ではそうでないのはなぜですか?

JavaScript が `===` 比較では 0 と -0 を等しいものとして扱うのに、`Object.is` ではそうでないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-20 18:02:16907ブラウズ

Why Does JavaScript Treat  0 and -0 as Equal in `===` Comparisons but Not with `Object.is`?

JavaScript での 0 と -0 の区別

ECMAScript 5.1 仕様では 0 と -0 を数値的に区別していますが、なぜ比較 0 === -0 は JavaScript で true と評価されます。

IEEE 754 標準と符号付きゼロ

JavaScript は数値表現に IEEE 754 標準を利用します。 2 つのゼロの存在: 0 (正のゼロ) と -0 (負のゼロ)。 IEEE 754 では、通常、ゼロは 0 としてエンコードされますが、0 と -0 は両方とも有効な表現です。

厳密等価比較アルゴリズム

ECMA のセクション 11.9.6 -262 仕様では、厳密等価比較アルゴリズムが定義されています。数値比較の場合、厳密な等価比較では 0 と -0 が等しいものとして扱われることが明示的に示されています:

x が 0 で y が −0 の場合、true を返します。
x が −0 で、y が 0 の場合、true を返します。

したがって、0 と -0 は数値的には異なる場合がありますが、便宜上および論理的な理由から、厳密な等価比較では等しいとみなされます。

Object.is 比較

ES2015 では、より正確な比較のために Object.is メソッドが導入されました。 Object.is は -0 と 0 を明示的に区別し、比較すると false を返します。

Object.is(-0, 0); // false

結論として、JavaScript は IEEE 754 標準を使用し、コーディング規約を簡素化するために厳密な等価比較で 0 と -0 を等しいものとして扱います。ただし、Object.is メソッドを使用すると、必要に応じてより微妙な比較が可能になります。

以上がJavaScript が `===` 比較では 0 と -0 を等しいものとして扱うのに、`Object.is` ではそうでないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。