Heim  >  Artikel  >  Web-Frontend  >  Warum behandelt JavaScript 0 und -0 in „==='-Vergleichen als gleich, aber nicht mit „Object.is'?

Warum behandelt JavaScript 0 und -0 in „==='-Vergleichen als gleich, aber nicht mit „Object.is'?

Susan Sarandon
Susan SarandonOriginal
2024-11-20 18:02:16845Durchsuche

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

Unterscheidung zwischen 0 und -0 in JavaScript

Während die ECMAScript 5.1-Spezifikation numerisch zwischen 0 und -0 unterscheidet, stellt sich die Frage, warum das Vergleich 0 === -0 wird in JavaScript als wahr ausgewertet.

IEEE 754 Standard- und vorzeichenbehaftete Nullen

JavaScript nutzt den IEEE 754-Standard für die Zahlendarstellung, der die Existenz von zwei Nullen zulässt: 0 (positive Null) und -0 (negative Null). In IEEE 754 wird Null normalerweise als 0 kodiert, aber sowohl 0 als auch -0 sind gültige Darstellungen.

Strikter Gleichheitsvergleichsalgorithmus

Abschnitt 11.9.6 der ECMA -262-Spezifikation definiert den strikten Gleichheitsvergleichsalgorithmus. Für numerische Vergleiche heißt es ausdrücklich, dass 0 und -0 bei strikten Gleichheitsvergleichen als gleich behandelt werden:

Wenn x 0 und y −0 ist, wird „true“ zurückgegeben.
Wenn x −0 und y 0 ist, wird true zurückgegeben.

Daher können 0 und -0 unterschiedlich sein Numerisch gesehen werden sie in strikten Gleichheitsvergleichen aus praktischen und logischen Gründen als gleich angesehen.

Object.is-Vergleich

ES2015 hat die Object.is-Methode für einen genaueren Vergleich eingeführt. Object.is unterscheidet explizit zwischen -0 und 0 und gibt beim Vergleich false zurück:

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

Zusammenfassend lässt sich sagen, dass JavaScript den IEEE 754-Standard verwendet und 0 und -0 in strengen Gleichheitsvergleichen als gleich behandelt, um Codierungskonventionen zu vereinfachen. Die Object.is-Methode ermöglicht jedoch bei Bedarf differenziertere Vergleiche.

Das obige ist der detaillierte Inhalt vonWarum behandelt JavaScript 0 und -0 in „==='-Vergleichen als gleich, aber nicht mit „Object.is'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn