JavaScript的===和==

==和===都是判断两个值是否相等,当然它们对相等的定义不尽相同。

===称为严格相等运算符(strict equality),它检测两个操作数是否严格相等,比较过程没有任何类型转换:

  • 如果两个值类型不相同,则它们不相等。
  • 如果两个值都是null或者都是undefined,则它们不相等。
  • 如果两个值都是true或者都是false,则它们相等。
  • 如果其中一个值是NaN,或者两个值都是NaN,则它们不相等。NaN和其他任何值都不相等,包括它本身。可以通过x!=x来判断是否为NaN
  • 如果两个值为数值且相等,则它们相等。
  • 位上的16位数完全相等,则它们相等。如果他们的长度不相同或内容不同,则它们不等。字符串不建议通过该方法进行判断!推荐使用String.localeCompare()。
  • 如果两个引用值指向同一个对象、函数或者数组,则它们是相等的。如果指向不同的对象,则它们是不等的,尽管两个对象具有完全一样的属性。
注意:JavaScript对象的比较是引用的比较,而不是值的比较,对象和其本身是相等的。如果两个不同的对象具有相同数量的属性,相同的属性名和值,它们依然是不等的。
==比较并不严格。如果两个操作数不是同一类型,那么相等运算符会尝试一些类型转换,然后在进行比较。
  • 如果两个操作数类型相同,则和上文所述的严格相等的比较规则一样。如果严格相等则相等,否则,不相等。
  • 如果两个操作数类型不同,“==”相等操作数也可能认为其相等。检测相等的会遵守如下的规则和类型转换。
    • 如果一个值是null,另一个是undefined,则它们相等。
    • 如果一个值是数字,另一个是字符串,先将字符串转换为数字,然后使用转换后的值进行比较
    • 如果其中一个值是true,则将其转换为1在进行比较。如果一个值是false,则将其转为0在进行比较。
    • 如果一个值是对象,另一个值是数字或字符串,则将其转换为原始值在进行比较。JavaScript语言核心内置类会首先尝试使用valueOf(),在尝试使用toString()
比较运算符喜欢数值,进行数值比较后,才会进行字符串比较。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值