Object.is()

par 1 contributeur :

Cette fonction, proposition pour ECMAScript 6 (Harmony), est expérimentale
Puisque cette fonction est toujours en développement dans certains navigateurs, veuillez consulter le tableau de compatibilité pour les préfixes à utiliser selon les navigateurs.
Il convient de noter qu'une fonctionnalité expérimentale peut voir sa syntaxe ou son comportement modifié dans le futur en fonction des évolutions de la spécification.

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 deux false
  • 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

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

Compatibilité des navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
Support simple 30 22 (22) Pas de support (Oui) Pas de support
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 Pas de support

Voir aussi

Étiquettes et contributeurs liés au document

Contributeurs à cette page : SphinxKnight
Dernière mise à jour par : SphinxKnight,