Rea*_*lar 4 javascript operators
为什么以下代码会产生a == 3?
var x = "abc";
var y = 3;
var z = "xyz";
var a = x && y || z;
Run Code Online (Sandbox Code Playgroud)
http://jsfiddle.net/thinkingmedia/qBZAL/
我原以为这会导致a == true.
为什么逻辑运算符评估"abc"为true但不评估3为true.相反,它会产生3结果.
此外,如果你改变y = 0那么a == "xyz"意味着&&被0视为false.将数字视为数字会怎样?
逻辑运算符在这里发生了什么?
amo*_*mon 15
这是可以预料的.
在JavaScript(以及许多其他语言)中,不仅布尔本身本身也是假的,但其他对象也可能是真实的或虚假的(参见mdn上的文档):
如有必要,值[...]将转换为布尔值.如果值是[...]为
0,-0,null,false,NaN,undefined,或空字符串(""),[它]假的.所有其他值,包括任何对象或字符串"false",都会创建[...] true.
逻辑运算符||并且&&不返回,true或者false它们返回最后一个参数来影响它们是真实还是虚假(引用):
expr1 && expr2-expr1如果可以转换为false则返回; 否则,返回expr2.因此,当与布尔值一起使用时,&&如果两个操作数都为真,则返回true; 否则,返回false.expr1 || expr2-expr1如果可以转换为true则返回; 否则,返回expr2.因此,当与布尔值一起使用时,||如果任一操作数为真,则返回true; 如果两者都为假,则返回false.
Ars*_*nko 10
第一步是评估"abc" && 3.
false && 3会回来的false,true && 3会回来的3."abc"不是假的,因此JavaScript采用第二部分,即3.
第二步是评估3 || "xyz".这里,JavaScript采用非空的第一个值,即3.这类似于this.firstObject ?? this.defaultValueC#:第二部分仅在第一部分为空时才采用.