Javacript використовує оцінку короткого замикання для логічних операторів ||і &&. Однак для інших мов він відрізняється тим, що він повертає результат останнього значення, яке зупинило виконання, а не значення trueабо falseзначення.
Наступні значення вважаються хибними в JavaScript.
- помилковий
- нуль
"" (порожній рядок)
- 0
- Нан
- невизначений
Чи не звертаючи уваги на першочерговість оператора правила, і тримати речі простими, такі приклади показують , яке значення призупинили оцінку, і отримує повертаються в якості результату.
false || null || "" || 0 || NaN || "Hello" || undefined // "Hello"
Перші 5 значень вгорі NaNє хибними, тому всі вони оцінюються зліва направо, поки воно не відповідає першому значенню, "Hello"що робить цілком правдивим значення, тому все вираження є істинним, тому все подальше вгору не буде оцінено і "Hello"повернеться в результаті вираження . Аналогічно в цьому випадку:
1 && [] && {} && true && "World" && null && 2010 // null
Перші п'ять значень є правдоподібними і оцінюються до тих пір, поки воно не зустріне перше значення 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');