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

Сообщение от 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
Ответить с цитированием