JavaScript中的相等和严格相等

JavaScript中的相等和严格相等

== 和 === 操作符分别用两个相同的标准检查两个值是否相等。这两个操作数都接受任意类型的操作值。===(严格相等操作符)根据严格相同的定义检查两个操作数是否相等”。 ==(相等操作符)根据更宽松的(允许类型转换的)相同定义检查两个操作是否相等。

JavaScript对象是按引用而不是按值比较的。对象与自己相等,与其他对象不相同。即使两个对象属性和属性值完全一样,它们也不相等。类似地,两个数组即使元素相同、顺序相同,它们也不相等。

严格相等

严格相等操作符===求值其操作数,然后按下列步骤比较两个值,不做类型转换。

  • 如果两个值类型不同,则不相等
  • 如果两个值都是undefined或者null,则相等
  • 如果两个值都是布尔值true或者布尔值false,则相等
  • 如果一个或两个值是NaN,则不相等(NaN不等于任何值,包括其NaN本身。要检查某个值是不是NaN,使用x!==x或全局isNaN()函数)
  • 如果两个值都是数值且值相等,则相等。如果一个值是0而另一个是-0,则也相等。
  • 如果两个值是字符串且相同位置包含完全相等的16位值,则相等。如果两个字符串长度或内容不同,则不相等。两个字符串可能看起来相同,也表示同样的意思,但底层编码却使用不同的16位值序列。JavaScript不会执行Unicode归一化操作,像这样的字符串用 === 或 == 操作符都不会判断相等。
  • 如果两个值引用同一个对象、数组或函数,则相等。如果它们引用不同的对象,即使两个对象有完全相同的属性,也不相等。

基于类型转换的相等

相等操作符==与严格相等类似,但没有那么严格。如果两个操作数的值类型不同,它会尝试做类型转换,然后再比较。

  • 如果两个值类型相同,则按前面的规则测试它们是否严格相等。如果严格相等,则相等。否则不相等。
  • 如果两个值类型不同,==操作符仍认为它们相等。此时它会使用一下规则,基于类型转换来判定相等关系。
                 - 如果一个值是null,另一个值是undefined,则相等。
                 - 如果一个值是数值,另一个是字符串,把字符串转换成数值,再比较转换后的数值。
                 - 如果一个值为true,把它转换为1,再比较。如果有一个值为false,把它转换为0,再比较。
                 - 如果一个值是对象,另一个值是数值或者字符串,先把对象转换为原始值,再比较。JavaScript内置的核心类先尝试使用valueOf(),再尝试使用toString()。但Date是个例外,这个类执行toString()转换。
                 - 其他任何值得组合都不相等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值