La méthode Object.is()
permet de déterminer si deux valeurs sont les mêmes.
Syntaxe
Object.is(value1, value2);
Paramètres
valeur1
- La première valeur à comparer.
valeur2
- La seconde valeur à comparer.
Valeur de retour
Un booléen indiquant si les arguments ont la même valeur.
Description
Object.is()
permet de déterminer si deux valeurs sont identiques. Deux valeurs sont considérées identiques si :
- elles sont toutes les deux
undefined
- elles sont toutes les deux
null
- elles sont toutes les deux
true
ou toutes les deuxfalse
- elles sont des chaînes de caractères de la même longueur et avec les mêmes caractères
- elles sont toutes les deux le même objet
- elles sont des nombres et
- sont toutes les deux égales à
+0
- sont toutes les deux égales à
-0
- sont toutes les deux égales à
NaN
- sont non-nulles, ne sont pas
NaN
et ont toutes les deux la même valeur
- sont toutes les deux égales à
Attention, ce n'est pas la même égalité qu'avec l'opérateur ==
. L'opérateur == applique différentes conversions à chaque opérande (si ils ne sont pas du même type) avant de tester l'égalité (d'où le comportement "" == false
qui donne true
), Object.is
ne convertit aucune des deux valeurs.
Cette égalité est également différente de l'égalité stricte qu'on peut avoir avec l'opérateur ===
. L'opérateur === (et également l'opérateur ==) considère que -0
et +0
sont égales et que Number.NaN
n'est pas égal à NaN
.
Exemples
Object.is("toto", "toto"); // true Object.is(window, window); // true Object.is("toto", "truc"); // false Object.is([], []); // false var test = {a: 1}; Object.is(test, test); // true Object.is(null, null); // true // Cas aux limites (cas spéciaux) Object.is(0, -0); // false Object.is(-0, -0); // true Object.is(NaN, 0/0); // true
Prothèse d'émulation (polyfill)
Object.is()
est une nouveauté liée au standard ECMA-262. En tant que tel, il peut ne pas être disponible dans chaque navigateur. On peut émuler le comportement de cette méthode grâce au script suivant (cela permet d'utiliser Object.is()
même s'il n'y a pas de support natif) :
if (!Object.is) { Object.is = function(v1, v2) { // Algorithme SameValue if (v1 === v2) { //Étapes 1-5, 7-10 //Étapes 6.b-6.b +0 !=-0 return v1 !== 0 || 1 / v1 === 1 / v2; } else { //Étapes 6.a: NaN == NaN return v1 !== v1 && v2 !== v2; } }; }
Spécifications
Spécification | Statut | Commentaires |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) La définition de 'Object.is' dans cette spécification. |
Standard | Définition initiale |
ECMAScript 2017 Draft (ECMA-262) La définition de 'Object.is' dans cette spécification. |
Projet |
Compatibilité des navigateurs
Fonctionnalité | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Support simple | 30 | 22 (22) | Pas de support | (Oui) | 9 |
Fonctionnalité | Android | Chrome pour Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Support simple | Pas de support | ? | 22.0 (22) | Pas de support | Pas de support | 9 |
Voir aussi
- Guide JavaScript : L'égalité en JavaScript qui illustre les trois manières de comparer en JavaScript
- Les opérateurs de comparaison