Javacript utilise l'évaluation des courts-circuits pour les opérateurs logiques ||
et &&
. Cependant, il est différent des autres langages en ce qu'il retourne le résultat de la dernière valeur qui a interrompu l'exécution, au lieu d'une valeur true
ou false
.
Les valeurs suivantes sont considérées comme fausses en JavaScript.
- faux
- nul
""
(chaîne vide)
- 0
- Nan
- indéfini
En ignorant les règles de priorité des opérateurs et en gardant les choses simples, les exemples suivants montrent quelle valeur a interrompu l'évaluation et est retournée en conséquence.
false || null || "" || 0 || NaN || "Hello" || undefined // "Hello"
Les 5 premières valeurs jusqu'à NaN
sont fausses donc elles sont toutes évaluées de gauche à droite, jusqu'à ce qu'elle rencontre la première valeur véridique - "Hello"
ce qui rend toute l'expression vraie, donc tout ce qui est plus haut ne sera pas évalué et sera "Hello"
renvoyé à la suite de l'expression . De même, dans ce cas:
1 && [] && {} && true && "World" && null && 2010 // null
Les 5 premières valeurs sont toutes véridiques et sont évaluées jusqu'à ce qu'elles rencontrent la première valeur falsifiée ( null
), ce qui rend l'expression fausse, elle 2010
n'est donc plus évaluée et null
est renvoyée à la suite de l'expression.
L'exemple que vous avez donné utilise cette propriété de JavaScript pour effectuer une affectation. Il peut être utilisé partout où vous avez besoin d'obtenir la première valeur véridique ou fausse parmi un ensemble de valeurs. Ce code ci-dessous attribuera la valeur "Hello"
à b
car il facilite l'attribution d'une valeur par défaut, au lieu de faire des vérifications if-else.
var a = false;
var b = a || "Hello";
Vous pouvez appeler l'exemple ci-dessous une exploitation de cette fonctionnalité, et je pense que cela rend le code plus difficile à lire.
var messages = 0;
var newMessagesText = "You have " + messages + " messages.";
var noNewMessagesText = "Sorry, you have no new messages.";
alert((messages && newMessagesText) || noNewMessagesText);
À l'intérieur de l'alerte, nous vérifions si messages
c'est faux, et si oui, évaluons et retournons noNewMessagesText
, sinon évaluons et retournons newMessagesText
. Comme c'est faux dans cet exemple, nous nous arrêtons à noNewMessagesText et alertons "Sorry, you have no new messages."
.
$f=$a or $f=$b or $f=$c; // etc
. PHP a à la fois l'||
opérateur et l'or
opérateur, qui font le même travail; cependantor
est évalué après l' affectation tandis que||
est évalué avant. Cela vous donne également le style perlish de$a=getSomething() or die('oops');