&&
(逻辑与)
-
规则:
&&
运算符会从左到右依次求值,直到找到第一个false
值。如果所有表达式都为true
,则返回最后一个表达式的值;如果某个表达式为false
,则直接返回该false
值,并停止进一步的求值。 -
应用
var n = 3 < arguments.length && void 0 !== arguments[3] && arguments[3];
-
解释: 在这里,
&&
用于连接多个条件。如果3 < arguments.length 为 true
,继续判断void 0 !== arguments[3]
;如果也为 true,再判断arguments[3]
的值,并将其赋值给n
。如果任何一个条件为false
,n
将会被赋值为该false
值。 -
总结: 只有在所有条件都为
true
的情况下,n
才会被赋值为arguments[3]
的值;否则,n
会被赋值为第一个false
条件的值。
||
(逻辑或)
-
规则:
||
运算符也从左到右依次求值,但它会返回第一个true
的表达式值,并停止进一步的求值。如果所有表达式都为false
,则返回最后一个表达式的值。 -
应用
如果将&&
替换为||
:var n = 3 < arguments.length || void 0 !== arguments[3] || arguments[3];
-
解释: 在这种情况下,
n
将被赋值为第一个true
条件的值。如果3 < arguments.length 为 true
,n
将立即被赋值为true
,并停止进一步判断。如果3 < arguments.length 为 false
,则检查void 0 !== arguments[3]
,依此类推。 -
总结: 只要有一个条件为
true
,n
就会被赋值为第一个true
条件的值;如果所有条件都为false
,n
将被赋值为最后一个条件的值。