js中数字和字符串一样的情况下比较为什么会是true;

var a = 2;
var b = "2";

if(a == b){
alert("正确");
}
会正常输出

阅读 7.7k
7 个回答

== 比较之前,如果两个操作数类型不同,它会自行转换操作数类型,然后在比较。

因为双等号比较时,不会比较类型。左侧是number,比较时,右侧的string会调用其valueOf尝试转换为number,转换成功则返回对应的原始类型number,转换失败则调用toString返回字符串。再与左侧的值进行比较。

要用三等号,双等号不比较类型

要使用三个=号,即“===”

新手上路,请多包涵
新手上路,请多包涵

在转换不同的数据类型时,相等和不相等操作符遵循下列基本规则:

  1. 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false转换为0,而true转换为1
  2. 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;
  3. 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较;
推荐问题
宣传栏