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