开博第一篇,聊聊 最基本的 “==” 与 “===”区别

  “==”与“===”都是比较左右两个值是否相等,但它们的原理是不同的,特别要理解“==”的比较。

  “==”是弱比较,如果左右两边的比较数类型不同,它们会转换成相同类型,再进行比较,那么问题来了,它们是怎么进行转换的呢?

  1. 如果左右两边是null 和 undefined,官方说两个值是相等的,但没有说明具体原因。从JavaScript类型转换规则看,只有它们都转换成了布尔值时(都为false),它们才是相等的,所以可以确定它们都向布尔值进行了转换;
  2. 如果左右两边一个是字符串,一个是数字,则会将字符串转换成数字进行比较;如 “1” == 1, 会将等式左边的字符串转为数字1后,再进行比较,结果为true
  3. 如果左右两边一个是数字,一个是布尔值,则会把布尔值转换成数字进行比较;如 1 == true 会将等式右边的true转换为数字1后进行比较,结果为true
  4. 如果左右两边一个字符串一个是布尔值,则会都往数字进行转换;如 true==“1”,会将true转为数字1,“1”转换为数字1后进行比较,结果为true

  “===”是严格相等,即左右两边要求类型和数字都是相同的。

如果还需更详细的解释,请参考《JavaScript权威指南》中类型的转换规则和关系表达式

posted @ 2018-02-01 18:05  TaurinZeng  阅读(102)  评论(0编辑  收藏  举报