Javacript对逻辑运算符||
和&&
. 但是,它与其他语言的不同之处在于它返回停止执行的最后一个值的结果,而不是 atrue
或false
值。
以下值在 JavaScript 中被认为是虚假的。
忽略运算符优先级规则并保持简单,以下示例显示了哪个值停止了评估,并作为结果返回。
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-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."
。