Javacript使用短路评价为逻辑运算符||
和&&
。但是,它与其他语言的不同之处在于它返回停止执行的最后一个值的结果,而不是一个true
, 或false
值。
以下值在 JavaScript 中被认为是假的。
- 错误的
- 空值
""
(空字符串)
- 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-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."
。