&
є побітовим І
Цей оператор очікує двох чисел і перенастроює число. Якщо вони не є числами, вони призначаються числам.
Як це працює? Вікіпедія має відповідь: https://en.wikipedia.org/wiki/Bitwise_operation#AND
Примітка: У Javascript не рекомендується використовувати цей оператор , оскільки немає цілочисельного типу даних, а лише плаваюча крапка. Таким чином, плаваючі перетворюються у цілі числа перед кожною операцією, що робить її повільною. Крім того, він не має реального використання в типових веб-додатках і створює нечитабельний код.
Загальне правило: уникати. Не використовуйте його. Він рідко має місце в доступному для читання та читаному коді JS.
&&
є логічним І
Він очікує двох аргументів і повертає:
- Перший термін, який вважає помилковим
- Останній термін в іншому випадку (якщо всі істинно-y)
Ось кілька прикладів:
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)
Якщо ви коли-небудь використовуєте його лише на Boolean, це саме оператор І з математичної логіки.
&&
ланцюжок операторів
Причиною цього оператора, як визначено вище, є ланцюжок операторів. Ви можете створити ланцюжок для цього оператора і досі дотримуватись вищевказаних правил.
true && 20 && 0 && 100 0 (it is the first false-y)
10 && 20 && true && 100 100 (last one, since all are true-y)
&&
коротке замикання
Як видно з визначення, як тільки ви виявите, що один термін неправдивий, вам не потрібно дбати про наступні терміни. Javascript навіть робить цей крок далі, умови навіть не оцінюються. Це називається коротким замиканням.
true && false && alert("I am quiet!")
Ця заява нічого не попереджає і false
повертається. Тому ви можете використовувати &&
оператор як коротшу заміну оператора if. Вони еквівалентні:
if (user.isLoggedIn()) alert("Hello!")
user.isLoggedIn() && alert("Hello!")
Майже всі компресори JS використовують цей трюк, щоб заощадити 2 байти.
fruits.length & veggies.length === 0
і логічне:fruits.length && veggies.length === true
.