Quelle est la différence entre & et && en JavaScript?
Exemple de code:
var first = 123;
var second = false;
var third = 456;
var fourth = "abc";
var fifth = true;
alert(first & second); // 0
alert(first & third); // 72
alert(first & fourth); // 0
alert(first & fifth); // 1
alert(first && second); // false
alert(first && third); // 456
alert(first && fourth); // abc
alert(first && fifth); // true
Il semble que && soit un "et" logique qui me donne toujours la deuxième valeur si les deux sont vrais.
Mais comment ça &?
(Soit dit en passant, && semble être "et" en Python; & semble être & en Python.)
&
est au niveau du bit ETCet opérateur attend deux nombres et répète un nombre . Dans le cas où ils sont pas des nombres, ils sont convertis en nombres.
Comment ça marche? Wikipedia a une réponse: https://en.wikipedia.org/wiki/Bitwise_operation#AND
Remarque: En Javascript, l'utilisation de cet opérateur est déconseillée , car il n'y a pas de type de données entier, juste une virgule flottante. Ainsi, les flottants sont convertis en entiers avant chaque opération, ce qui le rend lent. De plus, il n'a aucune utilité réelle dans les applications Web classiques et produit du code illisible.
Règle générale: à éviter. Ne l'utilisez pas. Il a rarement sa place dans un code JS maintenable et lisible.
&&
est logique ETIl attend deux arguments et renvoie:
Voici quelques exemples:
0 && false 0 (both are false-y, but 0 is the first)
true && false false (second one is false-y)
true && true true (both are true-y)
true && 20 20 (both are true-y)
Si vous ne l'utilisez que sur Boolean, c'est exactement l'opérateur AND de la logique mathématique.
&&
chaînage opérateurLa raison pour laquelle cet opérateur est défini comme ci-dessus est le chaînage des opérateurs. Vous êtes capable de chaîner cet opérateur tout en respectant les règles ci-dessus.
true && 20 && 0 && 100 0 (it is the first false-y)
10 && 20 && true && 100 100 (last one, since all are true-y)
&&
court-circuitComme on peut le voir dans la définition, dès que vous trouvez qu'un terme est faux-y, vous n'avez pas à vous soucier des termes suivants. Javascript va même plus loin, les termes ne sont même pas évalués. C'est ce qu'on appelle un court-circuit.
true && false && alert("I am quiet!")
Cette instruction n'alerte rien et false
est retourné. Par conséquent, vous pouvez utiliser le &&
opérateur comme remplacement plus court d'une instruction if. Ce sont équivalents:
if (user.isLoggedIn()) alert("Hello!")
user.isLoggedIn() && alert("Hello!")
Presque tous les compresseurs JS utilisent cette astuce pour économiser 2 octets.
&
est le "et" au niveau du bit. Cela signifie que si vous avez deux nombres convertis en binaire, le résultat est un nombre qui a le 1
chiffre aux positions où les deux nombres ont 1
.
100011 //35
& 111001 //57
---------
100001 //35 & 57 == 33
Avec toutes les idées élevées et détaillées tout au long, la réponse pratique du profane qui a résolu ma tête en battant sur une chaîne d'instructions IF de quatre chaînées && provoquant FAILURE à faire le travail d'évaluation à portée de main en tant que IF ((sessionStorage.myLable! == "LableStringA" ) && (sessionStorage.myLable! == "LableStringB") && (sessionStorage.myLableZ! == "LableStringA") && (sessionStorage.myLableZ! == "LableStringB")) {...) était PRATIQUEMENT résolu dans le monde réel avec la solution de -4 voix basse (maintenant affichée juste en dessous) en utilisant simplement un simple & au lieu de && Merci Jake Wayne (et Russ). Remarque, en testant mon exemple! = A également fonctionné s'il est utilisé à la place du préféré! ==