前几天碰到朋友发的一篇文章,让我困扰了好几天,是关于==运算符的问题。
大概意思是这样的
0 == '0' true
[] == 0 true
'0' == [] false
看完以后,是不是感觉跟白马非马有点像。在我之前的印象中,我以为==运算符最后都会转换成数字然后进行比较,然后这道题让我彻底崩溃了。
然后在网上找啊找,终于让我找到了答案,开心ing。。。。
==运算符发生的隐式转换
在说这个之前,我们先要知道在js中,数据类型分为两类:基本数据类型和引用数据类型。
基本数据类型为Undefined、Null、Boolean、Number 和 String。
引用数据类型为Object。
那==运算符是如何判断两个数据相等的呢?比如我们要判断x==y
如果x和y是相同类型我们这里就不说了,比较简单。
我们主要说说不同类型的比较,我们这里分为几种情况:
- 如果 Type(x) 为 Number 且 Type(y) 为 String,以 x == ToNumber(y) 的比较结果作为返回
- 如果 Type(x) 为 String 且 Type(y) 为 Number,以 ToNumber(x) == y 的比较结果作为返回值
- 如果 Type(x) 为 Boolean,以 ToNumber(x) == y 的比较结果作为返回值
- 如果 Type(y) 为 Boolean,以 x == ToNumber(y) 的比较结果作为返回值
- 如果 Type(x) 为 String 或 Number 且 Type(y) 为 Object,以 x == ToPrimitive(y) 的比较结果作为返回值
- 如果 Type(x) 为 Object 且 Type(y) 为 String 或 Number,以 ToPrimitive(x) == y 的比较结果作为返回值
知道上面的几种情况以后,对于文章开头的问题就很好解决了,空数组转换成原始类型为空字符串,所以是返回false。
我这里只是比较简单的说了下,有兴趣的同学可以看下方的参考链接。
参考链接:https://www.zhihu.com/question/20348948
以上就是小弟给你分享的内容,欢迎来踩!!!
网友评论