search

Home  >  Q&A  >  body text

About the judgment of == in javascript

0 == "" // true

Is the above code caused by implicit conversion or because 0 is equal to false and "" is also equal to false, so they are equal, but I think the possibility of implicit conversion is high, because it will not appear if the === sign is used This kind of problem.

My question is this, it is

0 == 0

still

false == false

黄舟黄舟2748 days ago638

reply all(6)I'll reply

  • 黄舟

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

    Let me make it clear to you, no one here is more familiar with implicit conversion than me.

    First look at the rules for == conversion in the ECMAScript specification:

    typeof 0 on the left is number type

    typeof "" on the right is string type

    According to the corresponding rules, if the lower 4 rules are met, comparison will be made at this time x==ToNumber(y) at this time 0==ToNumber("")

    Let’s take a look at ECMAScript’s corresponding rules for ToNumber():

    Then look below:

    Did you see that the final ToNumber("") will be converted to +0

    In the end it became 0==+0. You said you can’t wait? Remember that implicit conversions end up being a comparison of two numbers.

    The specific corresponding rules can be described in this picture:

    Of course these are the simplest. You can try these:

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

    Okay, if you don’t understand the above, you can read the two articles I wrote. It takes time to study to understand.

    From []==![] to true to analyze various painful type conversions in JavaScript

    From ++[[]][+[]]+[+[]]==10? An in-depth explanation of implicit conversion of weakly typed JS

    After understanding the above, you can use these to practice:

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

    reply
    0
  • 怪我咯

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

    A kind of

    0等于false也是隐式类型转换.

    reply
    0
  • 大家讲道理

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

    Conversions are all false.

    !!0
    !!""
    

    Of course, the specific comparison depends on the rules

    reply
    0
  • 怪我咯

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

    0 will be implicitly converted to false, and an error will be reported in strict mode. It is recommended to use === for comparison

    reply
    0
  • 给我你的怀抱

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

    JS has rules for "==" comparison, which fits your situation specifically: if one value is a number and the other is a string, first convert the string into a number, and then use the converted value Compare.
    So the empty string "" on the right side of the equal sign will be converted into the number 0, and the left and right are equivalent. There is a detailed introduction to == comparison conversion rules on the js authoritative guide

    reply
    0
  • 怪我咯

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

    0 == "" // true

    This sentence is equivalent to 0 == Number("")

    For comparisons between the three types of numbers, strings, and Boolean types, they are first converted into numbers and then compared.

    reply
    0
  • Cancelreply