JavaScript. Подробное руководство, 6-е издание, стр. 41
Оператор
<b>&&</b><b>х == 0 && у == 0 // true тогда и только тогда, когда х и у равны 0</b>Выражения отношений всегда возвращают значение
<b>true</b><b>false</b><b>&&</b><b>true</b><b>false</b><b>&&</b><b>||</b>Но оператор
<b>&&</b><b>false, null, undefined, 0, -0, NaN</b><b>&&</b><b>&&</b>Обратите внимание, что в предыдущем абзаце говорилось, что оператор возвращает «истинное значение» или «ложное значение», но при этом не уточнялось, какое именно значение возвращается. Для этого нам необходимо перейти на третий, заключительный уровень оператора
<b>&&</b><b>&&</b>В противном случае, если значение слева является истинным, тогда результат всего выражения определяется значением справа. Если значение справа является истинным, значением всего выражения также должно быть истинное значение, а если значение справа является ложным, значением всего выражения должно быть ложное значение. Поэтому, когда значение слева является истинным, оператор
<b>&&</b><b>var о = { х : 1 }; </b><b>var р = null;</b><b>о && о.х // => 1: о - истинное значение, поэтому возвращается о.х</b><b>р && р.х // => null: р - ложное значение, поэтому возвращается р,</b><b> // а выражение р.х не вычисляется</b>Важно понимать, что оператор
<b>&&</b><b>null</b>Такое поведение оператора
<b>&&</b><b>&&</b><b>if (а == b) stop(); // Функция stop() вызывается, только если а == b </b><b>(а == b) && stop(); // То же самое</b>В целом следует с осторожностью использовать выражения с побочными эффектами (присваивания, инкременты, декременты или вызовы функций) справа от оператора
<b>&&</b>Несмотря на довольно запутанный алгоритм работы этого оператора, проще всего и абсолютно безопасно рассматривать его как оператор булевой алгебры, который манипулирует истинными и ложными значениями.
4.10.2. Логическое ИЛИ (||)
Оператор
<b>||</b>Хотя оператор
<b>||</b><b>&&</b>Как и при использовании оператора
<b>&&</b>Характерное использование этого оператора заключается в том, что он выбирает первое истинное значение из предложенного множества альтернатив:
<b>// Если переменная max_width определена, используется ее значение. В противном случае </b><b>// значение извлекается из объекта preferences. Если объект (или его свойство max_with) </b><b>// не определен, используется значение константы, жестко определенной в тексте программы, </b><b>var max = max_width || preferences.max_width || 500;</b>Этот прием часто используется в функциях для определения значений по умолчанию параметров: