Javacript 对逻辑运算符和使用短路评估。||
&&
但是,它与其他语言的不同之处在于,它返回停止执行的最后一个值的结果,而不是true
或false
值。
以下值在JavaScript中被认为是虚假的。
下面的示例忽略了运算符的优先级规则,并且保持简单,下面的示例显示哪个值停止了评估,并作为结果返回。
false || null || "" || 0 || NaN || "Hello" || undefined // "Hello"
直到第一个5个值NaN
都是虚假的,因此它们都从左到右进行求值,直到满足第一个真实值为止- "Hello"
这使整个表达式为true,因此将不对任何向上的值进行求值,并"Hello"
作为表达式的结果返回。同样,在这种情况下:
1 && [] && {} && true && "World" && null && 2010 // null
前5个值都是真实的,直到遇到第一个伪造的值(null
)为止,它都会被求值,这会使表达式为假,因此2010
不再进行求值,并null
作为表达式的结果返回。
您所给出的示例就是利用JavaScript的此属性来执行分配。它可以在需要获取一组值中第一个真值或假值的地方使用。下面的代码将为该值分配值"Hello"
,b
因为它使分配默认值更加容易,而不是进行if-else检查。
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和alert "Sorry, you have no new messages."
。
$f=$a or $f=$b or $f=$c; // etc
。PHP同时具有||
运算符和or
运算符,它们执行相同的工作。但是or
,在赋值之后进行评估,而在赋值||
之前进行评估。这也为您带来了$a=getSomething() or die('oops');