Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does "1" == 1 return true in Javascript? [duplicate]

I'm trying to learn more about this liberal language and a good explanation would be awesome.

Thanks!

like image 279
user3308863 Avatar asked Feb 14 '14 04:02

user3308863


People also ask

What is the result of true == 1 in JavaScript?

In a way, yes it is 1.

Why == is false in JavaScript?

Because == (and === ) test to see if two objects are the same object and not if they are identical objects.

Why does true == true return false?

Because they don't represent equally convertible types/values. The conversion used by == is much more complex than a simple toBoolean conversion used by if ('true') . So given this code true == 'true' , it finds this: "If Type(x) is Boolean , return the result of the comparison ToNumber(x) == y ."

Why does [] === [] return false?

As you are creating new objects with all those comparisons, all will point to different objects, hence the result will be false .


2 Answers

From the spec

The Abstract Equality Comparison Algorithm

The comparison x == y, where x and y are values, produces true or false. Such a comparison is performed as follows:

  1. If Type(x) is the same as Type(y), then

    a. If Type(x) is Undefined, return true.

    b. If Type(x) is Null, return true.

    c. If Type(x) is Number, then

    i. If x is NaN, return false.
    
    ii. If y is NaN, return false.
    
    iii. If x is the same Number value as y, return true.
    
    iv. If x is +0 and y is −0, return true.
    
    v. If x is −0 and y is +0, return true.
    
    vi. Return false.
    

    d. If Type(x) is String, then return true if x and y are exactly the same sequence of characters (same length and same characters in corresponding positions). Otherwise, return false.

    e. If Type(x) is Boolean, return true if x and y are both true or both false. Otherwise, return false.

    f. Return true if x and y refer to the same object. Otherwise, return false.

  2. If x is null and y is undefined, return true.

  3. If x is undefined and y is null, return true.

  4. If Type(x) is Number and Type(y) is String, return the result of the comparison x == ToNumber(y).

  5. If Type(x) is String and Type(y) is Number, return the result of the comparison ToNumber(x) == y.

  6. If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y.

  7. If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).

  8. If Type(x) is either String or Number and Type(y) is Object, return the result of the comparison x == ToPrimitive(y).

  9. If Type(x) is Object and Type(y) is either String or Number, return the result of the comparison ToPrimitive(x) == y.

  10. Return false.

like image 159
Xotic750 Avatar answered Sep 27 '22 21:09

Xotic750


This is because JavaScript only compares the values in the statement "1" == 1. The double equals sign tells JavaScript that even if the types are different, its allowed to coerce and compare the pure values.

This is why it is often advised to use the triple equals sign, to avoid this type coercion. Triple equals signs purely compare value.

like image 40
turnt Avatar answered Sep 27 '22 23:09

turnt