2013-10-09 5 views

ответ

9

undefined || 'c' оценивается в 'c', поэтому a.b === (undefined || 'c') эквивалентно бегущему a.b === 'c', что явно не соответствует действительности.

Вот документация MDN логических операторов для справки:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators

В частности:

Оператор: Логическое ИЛИ (||)
Использование: выражение1 || expr2
Описание: Возвращает Expr1, если он может быть преобразован в истинный; в противном случае возвращается expr2. Таким образом, при использовании с булевыми значениями || возвращает true, если оба операнда истинны; если оба они ложны, возвращает false.

В случае undefined || 'c', undefined не может быть преобразован в логическую единицу, так 'c' возвращается оператором ||.

+0

О, ничего себе, я должен был это осознать, спасибо – Tetraodon

+0

Удивительный ответ, информативный. – vikingmaster

2

a.b === (undefined || 'c')

a.b является undefined, как вы упомянули.

|| или оператор вернет свою левую сторону, если это правда; иначе он вернет свою «правую сторону».

В этом случае (undefined || 'c') оценивает 'c', оставляя вас с a.b === 'c', что является ложным.

Смежные вопросы