Puis-je utiliser une telle syntaxe?

Dans une bibliothèque JS, j'ai vu une telle syntaxe:

if (val > 5 == t) { ... } 

J'ai testé ceci dans la console:

 1 == 1 == 2 // false 2 > 1 == 1 // true 1 == 2 == 1 // false 1 == 1 == 1 // true 1 < 2 < 3 // true 1 > 2 > 3 // false 

Au premier coup d'œil, tout est correct. Est-ce que cela peut être utilisé?

 1 == 1 == 2 // this true == 2 // becomes this 1 == 2 // which becomes this, and is false 
 2 > 1 == 1 // this true == 1 // becomes this 1 == 1 // which becomes this, and is true 

…etc.

Si vous vous demandez la conversion, vous devez effectuer une recherche sur l'opérateur == , qui utilise l' Algorithme de comparaison d'égalité abstraite .

Vous ne comparez pas vraiment ce que vous pensez comparer:

 (1 == 1) == 2 // actually true == 2 which is false (1 == 2) == 1 // actually false == 1 which is false 

C'est pourquoi l'égalité stricte === échouera dans tous les cas

C'est une syntaxe correcte mais pas celle que je recommanderais. Ce qui se passe, c'est probablement:

 if ((val > 5) == t) { ... } I tested this in console: (1 == 1) == 2 // false (2 > 1) == 1 // true (1 == 2) == 1 // false (1 == 1) == 1 // true (1 < 2) < 3 // true (1 > 2) > 3 // false 

Avec le booléen à gauche converti implicitement en un int.

Il n'y a rien qui vous empêche d'utiliser une telle syntaxe aventureuse, mais n'oubliez pas que l'une des raisons les plus fréquentes pour avoir des bogues dans le code JavaScript est un problème de priorité des opérateurs .

Par conséquent, il est fortement conseillé de définir explicitement la priorité en ajoutant des brackets aux groupes de priorité au cas où ils se composent de plus que des expressions mathématiques simples pour lesquelles la priorité est clairement déterminable.

Une autre préoccupation est la contrainte de type.
Sortie jslint :

Erreur: problème à la ligne 2 caractère 13: attendu '===' et à la place vu '=='.

 if (val > 5 == t) { }