【发布时间】:2014-08-18 08:53:37
【问题描述】:
逻辑 AND (&&) 和 OR (||) 运算符 --- 谁知道他们可以这样欺骗我们 :)
他们对 JS 的定义(根据this 解释)如下:
expr1 && expr2 => 如果expr1可以转换为false则返回; 否则,返回 expr2。因此,当与布尔值一起使用时,&& 如果两个操作数都为真,则返回真;否则,返回 false。
expr1 || expr2 => 如果expr1可以转换为真则返回; 否则,返回 expr2。因此,当与布尔值一起使用时,|| 如果任一操作数为真,则返回真;如果两者都为假,则返回 假的。
测试一下,确实和定义一样,但问题出在:
false || "" //returns ""
"" || false //returns false
所以,很明显:
(false || "") == ("" || false) // true
但是很遗憾
(false || "") === ("" || false) // false
到主要的两个问题:
- 这是一个错误吗,或者为什么 JavaScript 会强制我们使用
==运算符或 使用&&和||运算符时要注意顺序? - 为什么javascript无法在这个表达式中将expr1转换为
true("" || false)?。我的意思是,这不是像在""前面加上 NOT (!) 运算符?
【问题讨论】:
-
"==" 强制进行类型转换。避免它总是好的
-
答案就在问题中。
expr1 || expr2 => Returns expr1 if it can be converted to true; otherwise, returns expr2。在最后一种情况下,您有"" === false这是错误的
标签: javascript