美文网首页
javascript“==”运算符发生的隐式转换

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

作者: 刘宇焱 | 来源:发表于2019-02-20 10:58 被阅读4次

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

    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

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

    相关文章

      网友评论

          本文标题:javascript“==”运算符发生的隐式转换

          本文链接:https://www.haomeiwen.com/subject/mipcyqtx.html