function a() { return (1 == 1 == 1); }
function b() { return ("1" == "1" == "1"); }
function c() { return ("a" == "a" == "a"); }
我在Chrome的控制台中测试了上面的代码,由于某种原因,a()
返回true,b()
返回true,然后c()
返回false。
为什么会这样呢?
因为您正在将第一个等式的(布尔)结果与(非布尔)第三个值进行比较。
在代码中,1 == 1 == 1
相当于(1 == 1) == 1
相当于true == 1
。
这意味着这三种方法可以更简单地写为:
function a() { return (true == 1); }
function b() { return (true == "1"); }
function c() { return (true == "a"); }
这些比较根据以下规则进行(重点是我的):
如果两个操作数的类型不同,则JavaScript会转换操作数,然后进行严格比较。如果操作数是数字或布尔值,则在可能的情况下将操作数转换为数字;否则,如果其中一个操作数是字符串,则如果可能,字符串操作数将转换为数字。如果两个操作数都是对象,则JavaScript会比较内部引用,当操作数引用内存中的同一对象时,内部引用相等。
那么在什么情况c
是,"a"
被转换为数字(给NaN
)和结果严格进行比较,以true
转换为数字(给1
)。
既然1 === NaN
是false
,第三个函数将返回false
。很容易看出为什么前两个函数会返回true
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句