Javacript использует оценку короткого замыкания для логических операторов ||
и &&
. Однако он отличается от других языков тем, что возвращает результат последнего значения, остановившего выполнение, вместо значения true
или false
.
Следующие значения считаются ложными в JavaScript.
- ложный
- значение NULL
""
(пустой строкой)
- 0
- бабушка
- не определено
Игнорируя правила приоритета операторов и сохраняя простоту, следующие примеры показывают, какое значение остановило оценку и в результате возвращается.
false || null || "" || 0 || NaN || "Hello" || undefined // "Hello"
Первые 5 значений NaN
являются ложными, поэтому все они оцениваются слева направо до тех пор, пока оно не встретит первое истинное значение - "Hello"
что делает все выражение истинным, поэтому все дальнейшее повышение не будет оцениваться и "Hello"
будет возвращено в результате выражения , Аналогично в этом случае:
1 && [] && {} && true && "World" && null && 2010 // null
Первые 5 значений являются достоверными и оцениваются до тех пор, пока не встретятся первое ложное значение ( null
), которое делает выражение ложным, поэтому 2010
больше не оценивается и null
возвращается в результате выражения.
В приведенном вами примере используется это свойство JavaScript для выполнения назначения. Он может использоваться где угодно, где вам нужно получить первое истинное или ложное значение среди набора значений. Этот код ниже будет присвоить значение , "Hello"
чтобы , b
как это делает его легче присвоить значение по умолчанию, вместо того , чтобы делать if-другую проверку.
var a = false;
var b = a || "Hello";
Вы можете назвать приведенный ниже пример использованием этой функции, и я считаю, что это затрудняет чтение кода.
var messages = 0;
var newMessagesText = "You have " + messages + " messages.";
var noNewMessagesText = "Sorry, you have no new messages.";
alert((messages && newMessagesText) || noNewMessagesText);
Внутри оповещения мы проверяем, messages
является ли ложным, и если да, то оцениваем и возвращаем noNewMessagesText
, иначе оцениваем и возвращаем newMessagesText
. Поскольку в этом примере это ложно, мы останавливаемся на noNewMessagesText и предупреждаем "Sorry, you have no new messages."
.
$f=$a or $f=$b or $f=$c; // etc
. В PHP есть||
оператор иor
оператор, которые выполняют одну и ту же работу; однакоor
оценивается после присвоения, в то время||
как оценивается до. Это также даст вам стиль$a=getSomething() or die('oops');