javascript中==和===的真正区别

js中==和===的区别 误区纠正

js中=的区别你真的懂吗

应该有很多的开发者都会和我这样认为,=的区别无非就是只是比较值,而=是比较值和类型,然而这真的是这么简单一回事吗?

今天偶然浏览到一篇博客讲明了=的真正区别,收益匪浅,所以分享下,

上面的理解是错的,[]false和[1]=[1]返回就可以推翻。[]==false,他们的值并不相等,但是返回true。[1]和[1],值相等,类型也相等,返回为false。因此上面理解是错的。

正确的理解是:

==是相等,先转换再比较,返回true。
===是全等,不转换就比较,返回true。

看下最简单的例子:
①基础类型vs基础类型
1== true //true
1 === true //false
再看两个复杂的例子:
②对象vs基础类型*
[] == false //true
[] === false //false
③对象vs对象
{age:6} == {age:6} //false
{age:6} === {age:6} //false
[1] == [1] //false
[1] === [1] //false
来看下《Javascript高级程序设计》关于=的规则

1.如果有一个操作数是布尔值,则在比较前先将其转换为数值,true转换为1,false转换为0,例如false == 0,true == 1
2.如果一个操作数是字符串,另一个操作数是数值,先将字符串转换成数值,例如"1"==1,’’ ==0
3.如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型按照前面的规则进行比较。(解释不清楚)
4.null和undefined是相等的。
5.如果有一个数是NaN,则相等操作符返回false,而不想等操作符返回true。NaN == NaN返回为false,因为规则如此。
6.如果两个操作数是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true,否则返回false。

顺便贴下原博主的链接https://segmentfault.com/a/1190000011658459 里面有讲明详细的转换规则

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值