将具有逻辑运算符的表达式作为参数传递给函数是什么意思?!
例如:
myFunc(expr_1 || expr_2 || expr_3);
它是否等同于以下内容?!:
var expr_all = expr_1 || expr_2 || expr_3;
myFunc(expr_all);
如果是这样的话,如果所有三个表达式都评估为字符串(而不是布尔值),或者expr_1
是undefined
还是其他什么,它应该如何工作?!
感谢。
答案 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值不是false
,null
,NaN
,""
,0
或undefined
这是有效的,因为||
是逻辑或陈述。它将从左到右返回第一个对象的值,这是真实的。否则它将返回false。
请参阅以下示例:
"a" || "b" //"a"
"" || "b" //"b"
"" || "" //""
"" || undefined //undefined
"" || [] // []
答案 1 :(得分:2)
||
不是比较运算符。这是一种速记条件。如果左侧的表达式求值为true,则返回该表达式,否则返回右侧的表达式。
如果在评估完成之前评估未定义的变量:undefinedVar || 3
则整个评估失败并发生错误。
您的2个代码示例是等效的。
答案 2 :(得分:1)
它们是等价的(如果忽略中间变量)。
JavaScript的逻辑OR运算符短路,因此它会破坏该OR链中的第一个truthy值并返回它。如果它们都不是真的,那么最后一个将被退回。
Truthy值与假值相反,这些值为0
,''
,false
,null
,undefined
等。如果其中一个变量恰好是0
,你可能遇到问题。