javascript:你真的了解==与===吗?

1 篇文章 0 订阅
1 篇文章 0 订阅

如果你只知道==是用来比较值是否相等,而===是比较 值+类型 是否相等,那么你接来下可能会大吃一惊的。

1.==是没有传递性的。何为传递性,就是如果a==b,b==c,那么a==c。但是在javascript里面,这未必成立。

var a=[1];
var b=[1];
a==1;//true
b==1;//true
a==b;//false

2.当两个比较的数据是引用类型的,==并不会转换其数据类型,不管他们是否为同一数据类型。这时比较的是两个对象是否为同一对象,类似c中的内存地址。期间不会调用对象的valueOf方法。这也解释了上面的现象。

var a=[1];
var b=[1];
a.valueOf=function(){
   alert('a valueOf');
   return 1;
}

a==b;//false,也不会执行a.valueOf方法

3.如果有一个基础类型数据和引用类型数据,那么这里会调用对象的valueOf方法,并会发生数据类型转换(或者说忽略数据类型)

var a=[1];

a.valueOf=function(){
   alert('a valueOf');
   return 1;
}

a=='1';//true,执行a.valueOf方法

4.===具有传递性。两个数据都是引用类型,这个用法与 == 一样,如果不是同一个对象,比较结果都是false。

var a=[1];
var b=[1];

a==b;//false
a===b;//false
5.用===比较两个基础类型的值,会验证值类型。

1==='1';//false


总结:

一.如果用==和===比较的两个数据都是引用类型,只有在两个变量引用同一个对象时,结果才会为真,否则为假。

二.如果只有一个引用类型数据,那么用==比较时,对象会调用valueOf方法;而===比较时,不会调用valueOf方法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值