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');