JavaScript 中 == 和 === 的区别

JavaScript 中 == 和 === 的区别

和其他语言有些不同,在 JavaScript 中除了用==操作符来判断是否相等外,还有一个===操作符,它们的区别是:==操作符会先将两边的值进行强制类型转换再比较是否相等,而===操作符不会进行类型转换。==操作符只要求比较两个值是否相等,而===操作符不仅要求值相等,而且要求类型相同。!=!==的区别也是类似的,!=号会做强制类型转换,而!==不会。

在 chrome 浏览器的环境下,测试一下就知道了:

// true
55 == '55'
// false
55 === '55'

第一个操作数是数值类型的55,第二个操作数是字符串类型的"55"。当一个操作数是字符串,另一个操作数是数值的时候,操作符==会把字符串转换成数值,所以结果就返回了true。而===不会做强制转换,所以数值类型的55和字符串类型的"55"当然是不相等的了。

// false
NaN == NaN
// false
NaN === NaN

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

// true
null == undefined
// false
null === undefined

还有两个特殊值的比较也是让人觉得难以理解,null用来表示空值,undefined用来表示不存在,但这在实际开发中并没有什么用,而且==和===对它们的处理也不一样。


由于==!=带来的隐式类型转换规则非常繁琐,以及为了避免混淆数据类型导致的 bug,我们推荐使用===操作符和!==操作符。除非你真的非常清楚隐式类型转换规则,否则千万别使用==!=

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,272评论 0 4
  • 什么是 JavaScript 语言? JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”(script...
    oWSQo阅读 1,834评论 0 1
  • 本章内容 语法 数据类型 流控制语句 理解函数 3.1 语法 3.1.1 区分大小写 区分大小写 3.1.2 标识...
    闷油瓶小张阅读 738评论 0 0
  • 第1章 JavaScript 简介 JavaScript 具备与浏览器窗口及其内容等几乎所有方面交互的能力。 欧洲...
    力气强阅读 1,191评论 0 0
  • 孤独相对于其他情绪总是被人不自觉放大。 -深夜加班,一个人走在回家途中,倍感孤独。 -胃痛到无法入眠,这时候你是孤...
    梓瀛阅读 153评论 0 0