关于javascript中==的判断

查看:50
本文介绍了关于javascript中==的判断的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

0 == "" // true

上面这段代码是隐式转换导致的还是因为0等于false,""也等于false所以它们才相等,但我觉得隐式转换的可能性大,因为使用 === 号就不会出现这种问题。

我的疑问是这样的它是

0 == 0

还是

false == false

这个问题已被关闭,原因:问题已解决 - 问题已解决,且对他人无借鉴意义

解决方案

我给你讲清楚吧,隐式转换这里没人比我更熟悉了。

首先看ECMAScript规范对==转换的规则:

左边typeof 0是number类型

右边typeof ""是string类型

根据对应规则,满足低4条规则,此时会进行conparison x==ToNumber(y)此时0==ToNumber("")

再来看看ECMAScript对ToNumber()的对应规则:

接着往下面找:

看到没,最后ToNumber("")会转成+0

最后就成了0==+0,你说等不等?记住隐式转换最后都会变成两个数字的比较。

具体对应规则这张图可以描述:

当然这都是最简单的,楼主可以试一试这几个:

[]==![]
++[[]][+[]]+[+[]]==10
console.log(([][[]]+[])[+!![]]+([]+{})[!+[]+!![]])

好了,上面弄不懂的话,可以看看我写的两篇文章,要花时间研究才能看得懂。

从 []==![] 为 true 来剖析 JavaScript 各种蛋疼的类型转换

从++[[]][+[]]+[+[]]==10?深入浅出弱类型JS的隐式转换

弄懂上面,这些可以拿去练习:

1.{}+{}

2.{}+[]

3.[]+{}

4.{}+1

5.({}+1)

6.1+{}

7.[]+1

8.1+[]

9.1-[]

10.1-{}

11.1-!{}

12.1+!{}

13.1+"2"+"2"

14.1+ +"2"+"2"

15.1++"2"+"2"

16.[]==![]

17.[]===![]

这篇关于关于javascript中==的判断的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆