Home > Web Front-end > JS Tutorial > Why Does JavaScript Treat 0 and -0 as Equal in `===` Comparisons but Not with `Object.is`?

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

Susan Sarandon
Release: 2024-11-20 18:02:16
Original
912 people have browsed it

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

Distinguishing Between 0 and -0 in JavaScript

While the ECMAScript 5.1 specification distinguishes between 0 and -0 numerically, the question arises why the comparison 0 === -0 evaluates to true in JavaScript.

IEEE 754 Standard and Signed Zeros

JavaScript utilizes the IEEE 754 standard for number representation, which allows for the existence of two zeros: 0 (positive zero) and -0 (negative zero). In IEEE 754, zero is typically encoded as 0, but both 0 and -0 are valid representations.

Strict Equality Comparison Algorithm

Section 11.9.6 of the ECMA-262 specification defines the Strict Equality Comparison Algorithm. For numerical comparisons, it explicitly states that 0 and -0 are treated as equal in strict equality comparisons:

If x is 0 and y is −0, return true.
If x is −0 and y is 0, return true.

Therefore, while 0 and -0 may be distinct numerically, they are considered equal in strict equality comparisons for convenience and logical reasons.

Object.is Comparison

ES2015 introduced the Object.is method for more precise comparison. Object.is explicitly distinguishes between -0 and 0, returning false when they are compared:

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

In conclusion, JavaScript uses the IEEE 754 standard and treats 0 and -0 as equal in strict equality comparisons to simplify coding conventions. However, the Object.is method allows for more nuanced comparisons if needed.

The above is the detailed content of Why Does JavaScript Treat 0 and -0 as Equal in `===` Comparisons but Not with `Object.is`?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template