Maison >interface Web >js tutoriel >Pourquoi JavaScript traite-t-il 0 et -0 comme égaux dans les comparaisons `===` mais pas avec `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!