--- title: Opérateurs de comparaison slug: >- conflicting/Web/JavaScript/Reference/Operators_03cb648b1d07bbaa8b57526b509d6d55 tags: - JavaScript - Opérateur - Reference translation_of: Web/JavaScript/Reference/Operators translation_of_original: Web/JavaScript/Reference/Operators/Comparison_Operators original_slug: Web/JavaScript/Reference/Opérateurs/Opérateurs_de_comparaison ---
{{jsSidebar("Operators")}}

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.

{{EmbedInteractiveExample("pages/js/expressions-comparisonoperators.html")}}

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

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
 0   == null;      // false
 0   == undefined  // false
null == undefined  // true

var obj1 = { "clé": "valeur"};
var obj2 = { "clé": "valeur"};
obj1 == obj2       // false

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

var objet1 = {'clé': 'valeur'};
var objet2 = {'clé': 'valeur'};
objet1 === objet2; // 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

Note : Chacun de ces opérateurs invoquera la fonction valueOf() des opérandes qui sont des objets avant d'effectuer la comparaison.

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 en 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é à un autre type, le moteur effectuera une conversion de la façon suivante :

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 État Commentaires
{{SpecName('ES1')}} {{Spec2('ES1')}} Définition initiale. Implémentée avec JavaScript 1.0
{{SpecName('ES3')}} {{Spec2('ES3')}} Ajoute les opérateurs === et !==. Implémentés avec JavaScript 1.3
{{SpecName('ES5.1', '#sec-11.8')}} {{Spec2('ES5.1')}} Définis dans plusieurs sections de la spécification : opérateurs relationnels, opérateurs d'égalité
{{SpecName('ES6', '#sec-relational-operators')}} {{Spec2('ES6')}} Définis dans plusieurs sections de la spécification : opérateurs relationnels, opérateurs d'égalité
{{SpecName('ESDraft', '#sec-relational-operators')}} {{Spec2('ESDraft')}} Définis dans plusieurs sections de la spécification : opérateurs relationnels, opérateurs d'égalité

Compatibilité des navigateurs

{{Compat("javascript.operators.comparison")}}

Voir aussi