suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Über das Urteil von == in Javascript

0 == "" // wahr

Wird der obige Code durch implizite Konvertierung verursacht oder weil 0 gleich falsch ist und „“ ebenfalls gleich falsch ist, sind sie also gleich, aber ich denke, dass die Möglichkeit einer impliziten Konvertierung hoch ist, da die Verwendung des ===-Zeichens nicht passieren wird . Frage.

Meine Frage ist, das ist es

0 == 0

immer noch

false == false

黄舟黄舟2809 Tage vor683

Antworte allen(6)Ich werde antworten

  • 黄舟

    黄舟2017-05-19 10:31:55

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

    首先看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.[]===![]

    Antwort
    0
  • 怪我咯

    怪我咯2017-05-19 10:31:55

    0等于false也是隐式类型转换的一种。

    Antwort
    0
  • 大家讲道理

    大家讲道理2017-05-19 10:31:55

    转换都是false。

    !!0
    !!""
    

    当然,具体的比较要看规则

    Antwort
    0
  • 怪我咯

    怪我咯2017-05-19 10:31:55

    0会隐式转换为false,严格模式下会报错,建议用===来比较

    Antwort
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-19 10:31:55

    js关于“==”的比较是有规则的,符合你这里的情况具体来说就是:如果一个值是数字,另一个是字符串,先将字符串转换成数字,然后使用转换后的值进行比较。
    所以等号右侧的空字符串“”会转换成数字0,左右就相当了。在js权威指南上有关于==比较转换规则的详细介绍

    Antwort
    0
  • 怪我咯

    怪我咯2017-05-19 10:31:55

    0 == "" // true

    这语句相当于 0 == Number("")

    对于数字、字符串、布尔类型这3种类型之间的比较都是先转换成数字再比较。

    Antwort
    0
  • StornierenAntwort