Вот краткий пересказ своими словами из спецификации 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