Показать сообщение отдельно
  #11 (permalink)  
Старый 14.05.2020, 16:56
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Как работают бинарные логические операторы && и || в JavaScript?
Вот краткий пересказ своими словами из спецификации ECMAScript 2020 о том, как работают логические операторы.

ToBoolean ( аргумент )
Абстрактная операция ToBoolean принимает аргумент. Она преобразует аргумент в значение типа Boolean согласно следующей таблице:

Код:
┌───────────────┬──────────────────────────────────────────────┐
│ Тип аргумента │                   Результат                  │
├───────────────┼──────────────────────────────────────────────┤
│   Undefined   │ возвратить false                             │
├───────────────┼──────────────────────────────────────────────┤
│     Null      │ возвратить false                             │
├───────────────┼──────────────────────────────────────────────┤
│    Boolean    │ возвратить аргумент                          │
├───────────────┼──────────────────────────────────────────────┤
│    Number     │ если аргумент равен +0, -0 или NaN,          │
│               │ то возвратить false, иначе возвратить true   │
├───────────────┼──────────────────────────────────────────────┤
│    String     │ если аргумент является пустой строкой        │
│               │ (её длина равна нулю), то возвратить false,  │
│               │ иначе возвратить true                        │
├───────────────┼──────────────────────────────────────────────┤
│    Symbol     │ возвратить true                              │
├───────────────┼──────────────────────────────────────────────┤
│    BigInt     │ если аргумент равен 0n, то возвратить false, │
│               │ иначе возвратить true                        │
├───────────────┼──────────────────────────────────────────────┤
│    Object     │ возвратить true                              │
└───────────────┴──────────────────────────────────────────────┘
Когда вычисляется A && B, то происходит следующее...
  • Если ToBoolean( A ) возвращает false, то вернуть A
  • иначе вернуть B

Когда вычисляется A || B, то происходит следующее...
  • Если ToBoolean( A ) возвращает true, то вернуть A
  • иначе вернуть B
Ответить с цитированием