5

将带有逻辑运算符的表达式作为参数传递给函数意味着什么?!

例如:

myFunc(expr_1 || expr_2 || expr_3);

是否等同于以下内容?!:

var expr_all = expr_1 || expr_2 || expr_3;
myFunc(expr_all);

如果是这样,它应该如何工作,特别是如果所有三个表达式都评估为字符串(而不是布尔值),或者 if expr_1isundefined或其他什么?

谢谢。

4

3 回答 3

7

myFunc(expr_1 || expr_2 || expr_3); Is it equivalent to the 下列的?!:

var expr_all = expr_1 || expr_2 || expr_3; myFunc(expr_all);

是的。它将第一个真值传递给函数。

真实值是不是false, null, NaN, "", 0, 或undefined

这是有效的,因为||是逻辑或语句。它将从左到右返回第一个真实对象的值。否则它将返回false。

请参阅以下示例:

"a" || "b" //"a"

"" || "b" //"b"

"" || "" //""

"" || undefined  //undefined

"" || [] // []
于 2013-05-21T19:47:10.727 回答
3

||不是比较运算符。它是一个简写条件。如果左边的表达式计算结果为真,则返回,否则返回右边的表达式。

如果在评估完成之前评估未定义的变量:undefinedVar || 3则整个评估失败并发生错误。

您的 2 个代码示例是等效的。

于 2013-05-21T19:45:33.317 回答
1

它们是等价的(如果您忽略中间变量)。

JavaScript 的逻辑 OR 运算符短路,所以它会在 OR 链中的第一个真值处中断并返回它。如果没有一个是真实的,最后一个将被退回。

真值与假值相反,假值是0''falsenullundefined等。如果其中一个变量恰好是0,您可能会遇到问题。

于 2013-05-21T19:47:10.463 回答