下击八写的JS小技巧:==与===到底发生了什么?


在js开发中有一个老生常谈的问题,就是=====的区别,虽然使用频率非常高,但同样出错频率也是同样的高。

虽然说出错频率高,但是大部分情况还是得过且过, == 不行换 ===,更甚的直接放弃==全部无脑使用===,这样做代码不但效率低下而且容易导致代码不稳定,所以弄清楚原理还是很有必要的。


首先明确一下 =====的命名差异:

  1. == 相等运算符
  2. === 严格运算符

由命名上的区别可以看出==只是相等,而===相较于相等应该是更为严格的相等运算。

接下来来看二者之间定义区别:

  1. ==仅判断数据的值,值相等即为真,类型不同时会将值转换后再比较
  2. ===优先判断类型,仅在同类型且值也相同才为真

再来看一下两者的运算顺序:

===的运算规则如下:

  1. 执行typeof判断值的类型,不同直接返回false
  2. 同一类型的基本类型(BooleanStringNumber),执行valueof,值相同则返回true
  3. 复合类型比较时(functionobjectarray),比较它们是否指向同一对象引用。
  4. undefinednull 与自身严格相等
null === null  //true
undefined === undefined  //true

==的运算规则如下:

  1. 在比较类型同一的数据时,与严格相等规则相同
  2. 在比较不相同数据时,会先将数据转换成同一类型,然后与严相等规则相同

类型转换的规则:

  1. 类型不同的基本类型比较时,字符串和布尔值都会转换成数值,然后比较数值是否相等
  2. 一个值是string另个是number,会把string转换成number再进行比较
  3. 一个值是true,会把它转成1再比较,false会转成0
  4. 复合类型与基本类型比较,会把复合类型使用valueoftoString后进行比较

值得注意的是
nullundefined 比较时 返回true
一个正常的值与undefined比较时 肯定返回false(特殊情况除外,如str='undefined')
一个正常的值 与 null 比较时一切皆有可能

看过上面的规则后可以发现:

  1. 当对比的类型可预测时直接使用== 一般是没有问题的只需要把握好类型的转换规则即可
  2. 当对比的类型不可预测且只希望已某一指定类型进行比较的时候就必须使用===来确保程序的严谨

了解了===== 对比时发生了什么以后,灵活的使用它们可以使代码更加的严谨,同时减少一些违反直觉的结果,而不是直接的拒绝使用==,无脑使用===

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 运算符是处理数据的基本方法,用来从现有的值得到新的值。JavaScript 提供了多种运算符,本章逐一介绍这些运算...
    许先生__阅读 3,783评论 0 3
  • 运算符是处理数据的基本方法,用来从现有的值得到新的值。JavaScript 提供了多种运算符,本章逐一介绍这些运算...
    徵羽kid阅读 4,005评论 0 0
  • 标签: 我的笔记 ---学习资料:http://javascript.ruanyifeng.com/ 1. 导论 ...
    暗夜的怒吼阅读 4,280评论 0 1
  • 01 不记得这是读东野圭吾的第几本书,开篇依旧能抓住人,用第一人称介绍,描述的特别有镜头感,整个画面慢慢打开,故事...
    杨宝宝漫谈阅读 3,294评论 0 0
  • 旧巷飘新酒,迟闻诞幼丁。 何虫屋上罄? 酷似褓中婴。 皓月催时序,频繁入夜心。 不觉双鬓重,复梦一人行。
    本为阅读 1,085评论 0 0

友情链接更多精彩内容