在函数参数中使用表达式和逻辑运算符

时间:2013-05-21 19:43:08

标签: javascript

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

例如:

myFunc(expr_1 || expr_2 || expr_3);

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

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

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

感谢。

3 个答案:

答案 0 :(得分:5)

  

myFunc(expr_1 || expr_2 || expr_3); Is it equivalent to the   以下内容:?!

     

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

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

Truthy值不是falsenullNaN""0undefined

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

请参阅以下示例:

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

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

"" || "" //""

"" || undefined  //undefined

"" || [] // []

答案 1 :(得分:2)

||不是比较运算符。这是一种速记条件。如果左侧的表达式求值为true,则返回该表达式,否则返回右侧的表达式。

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

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

答案 2 :(得分:1)

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

JavaScript的逻辑OR运算符短路,因此它会破坏该OR链中的第一个truthy值并返回它。如果它们都不是真的,那么最后一个将被退回。

Truthy值与假值相反,这些值为0''falsenullundefined等。如果其中一个变量恰好是0,你可能遇到问题。