js中两个等号和三个等号的区别

js中两个等号会进行类型转換,先转化为同类型的基础数据类型,再比较。而三个等号不会进行类型转换,如果类型不同就会直接返回false,复合类型必须是两个引用的内存是一个,才会返回true。这里我们主要想探讨一下两个等号时这个类型转換是怎么运作的。

首先,如果两边都是基础数据类型,直接转換成同类型进行比较。例如

'' == 0

前面是个string 后面是个number,所以会把string转成number再比较,这就相当于

Nubmer('') == 0

自然返回的是true。

如果是复合类型呢,会先调用valueOf(),如果valueOf返回的是一个复合类型,则会再調用返回对象的toString()方法。

看下面的例子

[] == 0
会先調用[].valueOf()。发现返回的是[]本身,再調用[].toString(), 返回'', 就跟前而的‘’==0一样了。

再看一个例子

var a = {
  valueOf: function() {
    console.log('valueOf is called');
    return this;
  },
  toString: function() {
    console.log('toString is called');
    return 'abc';
  },
};
a == 'abc';

valueOf和toString会被依次調用。

var a = {
  valueOf: function() {
    console.log('valueOf is called');
    return 'abc';
  },
  toString: function() {
    console.log('toString is called');
    return 'bcd';
  },
};
a == 'abc';
只会調用valueOf


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值