В JavaScript и ||
, и &&
являются логическими операторами короткого замыкания, которые возвращают первое полностью определенное «логическое значение» при оценке слева направо.
В выражении X || Y
, X
сначала оценивается и интерпретируется как логическое значение. Если это логическое значение «true», оно возвращается. И Y
не оценивается. (Поскольку не имеет значения, является ли Y
истинным или Y
ложным, X || Y
полностью определен.) Это часть короткого замыкания.
Если это логическое значение равно «false», то мы все равно не будем знать, является ли X || Y
истиной или ложью, до тех пор, пока не оценим Y
и не будем интерпретировать его как логическое значение. Итак, Y
возвращается.
И &&
делает то же самое, за исключением того, что останавливает оценку, если первый аргумент имеет значение false.
Первая сложная часть заключается в том, что когда выражение оценивается как «true», тогда возвращается само выражение. Который считается «истинным» в логических выражениях, но вы также можете использовать его Вот почему вы видите фактические возвращаемые значения.
Вторая сложность заключается в том, что когда выражение оценивается как «ложное», то в JS 1.0 и 1.1 система возвращает логическое значение «ложное»; тогда как в JS 1.2 он возвращает фактическое значение выражения.
В JS false
, 0
, -0
, ""
, null
, undefined
, NaN
и document.all
все считаются ложными .
Здесь я, конечно, цитирую логические значения для обсуждения. Конечно, буквенная строка "false"
не совпадает со значением false
, и поэтому имеет значение true.