为什么1 == 1 == 1返回true,“ 1” ==“ 1” ==“ 1”返回true,而“ a” ==“ a” ==“ a”返回false?

chris97ong:
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 === NaNfalse,第三个函数将返回false很容易看出为什么前两个函数会返回true

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章