Maison >interface Web >js tutoriel >Pourquoi JavaScript traite-t-il 0 et -0 comme égaux dans les comparaisons `===` mais pas avec `Object.is` ?

Pourquoi JavaScript traite-t-il 0 et -0 comme égaux dans les comparaisons `===` mais pas avec `Object.is` ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-20 18:02:16904parcourir

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

Distinguer entre 0 et -0 en JavaScript

Alors que la spécification ECMAScript 5.1 fait la distinction numérique entre 0 et -0, la question se pose de savoir pourquoi le comparaison 0 === -0 est évalué à vrai en JavaScript.

IEEE 754 Zéros standards et signés

JavaScript utilise la norme IEEE 754 pour la représentation des nombres, qui permet l'existence de deux zéros : 0 (zéro positif) et -0 (zéro négatif). Dans IEEE 754, zéro est généralement codé sous la forme 0, mais 0 et -0 sont des représentations valides.

Algorithme de comparaison d'égalité stricte

Section 11.9.6 de l'ECMA -262 définit l'algorithme de comparaison d'égalité stricte. Pour les comparaisons numériques, il indique explicitement que 0 et -0 sont traités comme égaux dans les comparaisons d'égalité stricte :

Si x est 0 et y est −0, renvoie vrai.
Si x est −0 et y est 0, renvoie vrai.

Par conséquent, même si 0 et -0 peuvent être numériquement distincts, ils sont considéré comme égal dans les comparaisons d'égalité stricte pour des raisons de commodité et de logique.

Comparaison Object.is

ES2015 a introduit la méthode Object.is pour une comparaison plus précise. Object.is fait explicitement la distinction entre -0 et 0, renvoyant false lorsqu'ils sont comparés :

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

En conclusion, JavaScript utilise la norme IEEE 754 et traite 0 et -0 comme égaux dans les comparaisons d'égalité stricte pour simplifier les conventions de codage. Cependant, la méthode Object.is permet des comparaisons plus nuancées si nécessaire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn