Apply your JS skills to key Mozilla projects as an MDN Fellow! http://mzl.la/MDNFellowship

mozilla
Vos résultats de recherche

    Opérateurs de comparaison

    Résumé

    JavaScript possède des opérateurs de comparaisons stricts et des opérateurs de comparaisons qui effectuent des conversions. Une comparaison strict (ex. : ===) ne sera vraie que si les deux opérandes sont du même type. La comparaison d'égalité faible (==) convertira les deux opérandes en un même type avant d'effectuer la comparaison. Pour les comparaisons relationnelles (ex. : <=), les opérandes sont tout d'abord converties en valeurs, puis en valeurs du même type, enfin la comparaison est effectuée.

    Les chaînes de caractères sont comparées en fonction de l'ordre lexicographique, avec des valeurs Unicode.

    Les règles de comparaisons pour les types primitifs sont les suivantes :

    • Deux chaînes de caractères sont strictement égales lorsqu'elles ont la même séquence de caractères, la même longueur et les mêmes caractères aux mêmes positions.
    • Deux nombres sont strictement égaux lorsqu'ils ont la même valeur. NaN n'est égal à rien, y compis lui-même. Le zéro positif et le zéro négatif sont considérés égaux.
    • Deux booléens sont strictement égaux s'ils valent tous les deux true ou tous les deux false.
    • Deux objets distincts ne sont jamais égaux l'un à l'autre (pour l'égalité faible et stricte).
    • Deux objets sont égaux si les deux opérandes sont des références au même objet.
    • Les types nul et indéfini sont strictement égaux à eux-mêmes et sont faiblement égaux l'un à autre.

    Les opérateurs d'égalité

    Égalité simple (==)

    L'opérateur d'égalité simple convertit les deux opérandes s'ils ne sont pas du même type, ensuite la comparaison stricte est appliquée. Si les deux opérandes sont des objets, le moteur JavaScript comparera les références internes pour voir si elles réfèrent au même objet en mémoire.

    Syntaxe

    x == y
    

    Exemples

     1   ==  1;     // true
    "1"  ==  1;     // true
     1   == '1';    // true
     0   == false;  // true
    

    Inégalité simple (!=)

    L'opérateur d'inégalité simple renvoie true si les deux opérandes ne sont pas égaux. Si les deux opérandes ne sont pas du même type, une conversion sera effectuée vers un type adéquat. Si les deux opérandes sont des objets, le moteur JavaScript comparera les références internes pour voir si elles réfèrent à des objets différents en mémoire.

    Syntaxe

    x != y

    Exemples

    1 !=   2;     // true
    1 !=  "1";    // false
    1 !=  '1';   // false
    1 !=  true;   // false
    0 !=  false;  // false
    

    Égalité stricte (===)

    L'opérateur d'égalité stricte renvoie true si les opérandes sont strictement égaux (voir ci-avant), aucune conversion de type n'est effectuée.

    Syntaxe

    x === y

    Exemples

    3 === 3   // true
    3 === '3' // false

    Inégalité stricte (!==)

    L'opérateur d'inégalité stricte renvoie true si les opérandes sont de types différents ou ne sont pas égaux.

    Syntaxe

    x !== y

    Exemples

    3 !== '3' // true
    4 !== 3   // true
    

    Opérateurs relationnels

    Supérieur strict (>)

    Cet opérateur renvoie true si l'opérande gauche est strictement supérieur à l'opérande droit.

    Syntaxe

    x > y

    Exemples

    4 > 3; // true
    

    Supérieur ou égal (>=)

    Cet opérateur renvoie true si l'opérande gauche est supérieur ou égal à l'opérande droit

    Syntaxe

     x >= y

    Exemples

    4 >= 3; // true
    3 >= 3; // true
    

    Inférieur strict (<)

    Cet opérateur renvoie true si l'opérande gauche est strictement inférieur à l'opérande droit

    Syntaxe

     x < y

    Exemples

    3 < 4; // true
    

    Inférieur ou égal (<=)

    Cet opérateur renvoie true si l'opérande gauche est inférieur ou égal à l'opérande droit

    Syntaxe

     x <= y

    Exemples

    3 <= 4; // true
    

    Utiliser les opérateurs d'égalité

    Les opérateurs d'égalité/inégalité faible (== et !=) utilisent l'algorithme de comparaison d'égalité abstraite afin de comparer les deux opérandes. Si les opérandes sont de types primitifs différents, le moteur tentera de les convertir vers un même type avant d'effectuer la comparaison. Ainsi, dans l'expression 5 == '5', la chaîne de droite est convertie en un nombre avant que la comparaison soit faite.

    Les opérateurs d'égalité/inégalité stricte (=== et !==) utilisent l'algorithme de comparaison d'égalité stricte. Si les opérandes sont de types différents, le résultat sera toujours false, on aura donc 5 !== '5'.

    Selon qu'on souhaite comparer des opérandes qui sont censés avoir le même type ou non, on utilisera l'un ou l'autre type d'opérateur.

    Si un opérande doit être comparé vers un autre type, le moteur effectuera une conversion de la façon suivante :

    • Si on compare une chaîne de caractères et un nombre, la chaîne sera comparée en une valeur numérique. On déduit une valeur mathématique à partir de la chapine de caractères puis on arrondit cette valeur pour qu'elle puisse être de type Nombre.
    • Si l'un des opérandes est de type booléen, true sera converti en 1 et false en +0.
    • Si on compare un objet avec un nombre ou une chaîne, le moteur JavaScript tentera de renvoyer la valeur par défaut de l'objet. Les opérateurs opèrent une conversion grâce aux méthodes valueOf (pour obtenir un nombre) et toString (pour obtenir une chaîne de caractères). Si cela ne fonctionne pas, une exception sera levée.
    • Un objet sera converti en un type primitif autre uniquement si l'autre opérande est un type primitif (autre qu'objet). Si les deux opérandes sont des objets, ils seront comparés comme deux objets (voir ci-avant) et l'égalité ne sera vérifiée que si les opérandes font référence au même objet en mémoire

    Note : Voir également la page sur les différents tests d'égalité et quand les utiliser.

    Note : Les objets String sont du type objet et ne sont pas de simples chaînes de caractères ! Cela peut parfois avoir des conséquences surprenantes :
    // true car les deux opérandes sont du type primitif chaîne de caractères
    'toto' === 'toto'
    
    var a = new String('toto');
    var b = new String('toto');
    
    // false car a et b sont du type objet mais font référence à deux objets distincts
    a == b 
    
    // false car a et b sont du type objet mais font référence à deux objets distincts
    a === b 
    
    // true car a et 'toto' sont de type différents et lorsque a est
    // converti, la fonction de conversion renvoie bien la chaîne 'toto'
    a == 'toto' 

    Spécifications

    Spécification Statut Commentaires
    Première édition d'ECMAScript Standard Définition initiale. Implémentée avec JavaScript 1.0
    Troisième édition d'ECMAScript. Standard Ajout des opérateurs === et !==. Implémentée avec JavaScript 1.3
    ECMAScript 5.1 (ECMA-262)
    La définition de 'Relational Operators' dans cette spécification.

    ECMAScript 5.1 (ECMA-262)
    La définition de 'Equality Operators' dans cette spécification.
    Standard  
    ECMAScript 6 (ECMA-262)
    La définition de 'Relational Operators' dans cette spécification.

    ECMAScript 6 (ECMA-262)
    La définition de 'Equality Operators' dans cette spécification.
    En cours de validation comme recommandation  

    Compatibilité des navigateurs

    Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
    Support simple (Oui) (Oui) (Oui) (Oui) (Oui)
    Fonctionnalité Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
    Support simple (Oui) (Oui) (Oui) (Oui) (Oui) (Oui)

    Voir aussi

    Étiquettes et contributeurs liés au document

    Contributors to this page: SphinxKnight, BenoitL, Jeremie, Kyodev, teoli
    Dernière mise à jour par : SphinxKnight,
    Masquer la barre latérale