ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript が `===` 比較では 0 と -0 を等しいものとして扱うのに、`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 サイトの他の関連記事を参照してください。