Object.is()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
La méthode Object.is()
permet de déterminer si deux valeurs sont les mêmes.
Syntaxe
Object.is(value1, value2);
Paramètres
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 (dans le même ordre)
-
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 toto = { a: 1 };
var truc = { a: 1 };
Object.is(toto, toto); // true
Object.is(toto, truc); // false
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)
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
Specification |
---|
ECMAScript Language Specification # sec-object.is |
Compatibilité des navigateurs
BCD tables only load in the browser
Voir aussi
- Guide JavaScript : L'égalité en JavaScript qui illustre les trois manières de comparer en JavaScript
- Les opérateurs de comparaison