javascript“==”运算符发生的隐式转换

前几天碰到朋友发的一篇文章,让我困扰了好几天,是关于==运算符的问题。
大概意思是这样的

0 == '0'   true
[] == 0   true
'0' == [] false

看完以后,是不是感觉跟白马非马有点像。在我之前的印象中,我以为==运算符最后都会转换成数字然后进行比较,然后这道题让我彻底崩溃了。
然后在网上找啊找,终于让我找到了答案,开心ing。。。。

==运算符发生的隐式转换
在说这个之前,我们先要知道在js中,数据类型分为两类:基本数据类型和引用数据类型。
基本数据类型为Undefined、Null、Boolean、Number 和 String。
引用数据类型为Object。

那==运算符是如何判断两个数据相等的呢?比如我们要判断x==y
如果x和y是相同类型我们这里就不说了,比较简单。
我们主要说说不同类型的比较,我们这里分为几种情况:

  1. 如果 Type(x) 为 Number 且 Type(y) 为 String,以 x == ToNumber(y) 的比较结果作为返回
  2. 如果 Type(x) 为 String 且 Type(y) 为 Number,以 ToNumber(x) == y 的比较结果作为返回值
  3. 如果 Type(x) 为 Boolean,以 ToNumber(x) == y 的比较结果作为返回值
  4. 如果 Type(y) 为 Boolean,以 x == ToNumber(y) 的比较结果作为返回值
  5. 如果 Type(x) 为 String 或 Number 且 Type(y) 为 Object,以 x == ToPrimitive(y) 的比较结果作为返回值
  6. 如果 Type(x) 为 Object 且 Type(y) 为 String 或 Number,以 ToPrimitive(x) == y 的比较结果作为返回值

知道上面的几种情况以后,对于文章开头的问题就很好解决了,空数组转换成原始类型为空字符串,所以是返回false。
我这里只是比较简单的说了下,有兴趣的同学可以看下方的参考链接。
参考链接:https://www.zhihu.com/question/20348948

以上就是小弟给你分享的内容,欢迎来踩!!!

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