本文分享自华为云社区《JavaScript/TypeScript里 == 和 === 的区别》,作者: gentle_zhou。

在JS/TS项目里,除了能看到==操作符来判断两个变量是否相等外,我们还会看到===操作符,这两者有什么区别吗?

先上结论,

  • 对于String, number这些基础类型,==操作符会先把两边的变量进行类型强制转换成相同的类型再比较是否相等;===操作符则不会进行类型转换,而是直接进行比较。
  • 对于array, object这些高级类型,==和 ===是没有区别的,因为它们比较的是 “指针地址” 。
  • 对于基础类型和高级类型,== 和 ===是有区别的;==操作符会先把高级类型转换为基础类型之后,进行值的比较;===操作符则不会进行转换,类型不同,直接返回false

也就是说,`==`操作符只要求比较两个变量的值是否相等,`===`操作符则是要求两个变量的值和类型都要相同;类似地,`!=`操作符会去做类型强制转换,`!==`操作符则不会转换类型。

我们写个基础类型变量的代码示例一下:

66 ==  '66'; // 返回true66 === '66' // 返回false

==操作符会把第一行里的字符串转换成数字,与66再进行比较,值相等,于是返回true;===操作符则不会做类型转换,因为左边数字,右边字符串,两者类型不同,就会返回false。

注意

对于特殊值NaN(Not a Number),表示非数字,NaN和任何数(包括它自己)做相等比较,都会返回false,所以判断NaN最好用isNaN()函数;

而对于undefined和null,两者的值相比较,会返回true。

代码示例如下:

NaN == 6; // 返回false
NaN === NaN; // 返回false
null == undefined; // 返回true
null === undefined; // 返回false

最后, 由于==和!=操作符带来的类型隐式转换规则非常繁琐,还有为了避免数据类型混淆导致出现bug,还是推荐使用===操作符和!==操作符

点击关注,第一时间了解华为云新鲜技术~

“==”和“===”,难道不是多一个的区别吗?相关推荐

  1. vb.net 与 c# 的switch ... case ...的一个重要区别

    vb.net 与 c# 的switch ... case ...的一个重要区别 与vb.net中case可以写比较表达式>,<,=等,但在c# (3.0及以下,不知道以后会不会加上)中就没 ...

  2. java和C操作数组的一个小区别

    最近写个关于数值计算的数学软件,是用java语言写的.在书上看到一个关于求代数多项式所有实根和复根的算法.里面有这个一段: againk:nn=N-k-1;p=0.0;q=0.0; it=0; ite ...

  3. guice spring_Spring vs Guice:重要的一个关键区别

    guice spring 根据弹簧对象的名称识别它们 不管使用XML还是Java配置都没有关系,Spring范围大致类似于Map <String,Object>结构. 这意味着您不能有两个 ...

  4. Spring vs Guice:重要的一个关键区别

    根据弹簧对象的名称识别它们 不管使用XML还是Java配置都没有关系,Spring范围大致类似于Map <String,Object>结构. 这意味着您不能有两个名称相同的对象 . 为什么 ...

  5. wps电脑版_WPS和MS Office的一个重要区别

    自动偶尔用了WPS,我就再也没有用过MS Office.因为我发现Office有的功能WPS全有,而WPS有的功能Office却可能没有,两者都有的,WPS更加贴近国人的用法. 先说一个WPS里面的非 ...

  6. 难道我买了一个假路由器?解决光猫引出的路由器网速很慢的问题

    文章目录 引言 教程 申请公网 IP 光猫改桥接 桥接模式 拨号上网 路由器改交换机模式 参考 引言 家里办理了 100 兆的移动宽带业务,师傅也上门安装了一个移动智能光猫.光猫也带了一个无线路由,即 ...

  7. cad高程测绘图lisp_已知CAD中的高程测绘图,很多点,如何求出所有高程的平均值呢?难道只能用计算器一个一个的相加来算吗?...

    回答: 1,地貌显示就简略,又叫计曲线,表示其细部,如丘陵地区的地图上使用较多,是一种比较科学的方法,从底到顶. 等高线表示地貌的原理 等高线表示地貌的原理是,因为等高线是按一定的等高距测绘的,地貌显 ...

  8. python中的且的符号and用两个和用一个的区别_Python 中的 or and 运算,看这一篇就够...

    问题出现: Python 中的 or,and 运算,可以写出比较复杂的演算表达式: 看了一些大神的演算规则解释,觉得不是很好理解,有些人甚至理解错了规则. 这里聊一下自己的理解. 其他人是怎么做的: ...

  9. post大小限制_作为一个程序员,面试中常问的get和post的区别,你真的知道吗

    作为一个程序员无论是搞前端的还是搞后端的,只要问起来GET和POST的区别,都能说出来个一二三四来. 你可能自己写过无数个GET和POST请求,或者也看过很多权威网站总结出来的区别,你非常清楚的知道什 ...

最新文章

  1. jQuery中常用的函数方法总结
  2. cocos creator 获取当前时间_前端开发者入门 Creator 必读吧
  3. 2018面向对象程序设计(Java)第3周学习指导及要求
  4. classin安卓手机安装条件_Classin在线学习平台安装指引——从这里打开知识的大门与北京四中网校名师面对面交流学习!...
  5. 用 Python 和 OpenCV 检测和跟踪运动对象
  6. Angular中实现一个简单的toDoList(待办事项)示例代码
  7. ArrayList,LinkedList,Vector的异同点
  8. 操作系统实验报告3:Linux 下 x86 汇编语言2
  9. [相关总结性文章] 写给即将入行的程序员的一封信
  10. 基于MVC的网站和在线教育系统
  11. 数值分析牛顿法 matlab,科学网—数值分析--非线性函数牛顿迭代法matlab程序 - 殷春武的博文...
  12. laravel配置加解密
  13. qt msvc编译中文乱码解决
  14. 《软件测试》阅读笔记
  15. windows下activemq安装下载
  16. Branch Prediction Is Not A Solved Problem:Measurements, Opportunities, and Future Directions(IISWC)
  17. Mysql_related
  18. python文本聚类 词云图_有哪些软件可以进行中文词频分析?
  19. 智慧供热管理系统提高居民用热的智能化
  20. 什么是数据类型?数据类型有什么用?

热门文章

  1. 面试官 | 这位连单点登录都不知道,让他回家等通知去吧
  2. HTML fieldset控件
  3. Bootstrap HTML 编码规范之IE兼容模式
  4. CSS z-index属性
  5. linux ntfs chkdsk,ntfs格式磁盘提示无法运行chkdsk解决办法
  6. 最短哈密尔顿圈matlab解法_复杂制造过程最优哈密尔顿圈算法的MATLAB仿真与分析.doc...
  7. c语言 将点同时保证x坐标从小到大,y坐标从小到大地排序,C语言程序设计实验报告(二)...
  8. java存款输入密码类,创建一个银行账户类,包括账号、用户姓名、密码和余额属性,实现开户、查询余额、取款、存款功能。...
  9. java简易扑克牌_简易扑克牌游戏(java)
  10. 使用ie浏览器设置Domain无法使用session的问题解决办法