Сообщение от andypop
|
Согласно вашей же табличке результат вычисления 'c' в булевом выражении - false и общий результат должен быть false, а не undefined
|
А где это вы увидели, что ToBoolean возвращает напрямую в качестве окончательного результата своё значение?
var a=false
var b=true
var c=undefined
console.log((a || c)) //undefined
console.log((b || c))//true
Я так понимаю (судя по коду выше),
a || c у вас означает
false || undefined . Смотрим...
Когда вычисляется
A || B, то происходит следующее...
- Если ToBoolean( A ) возвращает true, то вернуть A
- иначе вернуть B
Подстанавливаем ваше выражение, получается...
Когда вычисляется
(A = false) || (B = undefined), то происходит следующее...
- Если ToBoolean( A = false ) возвращает true (а согласно таблице ToBoolean( A = false ) возвращает false), то вернуть A (поскольку условие не выполняется, смотрим далее)
- иначе вернуть B (согласно подстановке, B было undefined, значит его и нужно вернуть)
Следовательно false || undefined === undefined