5

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

Thanks!

user3308863
  • 71
  • 1
  • 1
  • 2
  • Take a look at [Comparison Operators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators) – Xotic750 Feb 14 '14 at 04:52
  • 1
    See http://stackoverflow.com/questions/80646/how-do-the-equality-double-equals-and-identity-triple-equals-comparis – Onyxite Feb 14 '14 at 04:52
  • See : http://docs.nodejitsu.com/articles/javascript-conventions/what-are-truthy-and-falsy-values – Velmurugan S Feb 14 '14 at 04:54
  • "1" converted to number and then checks so , It always true only. – Velmurugan S Feb 14 '14 at 04:56
  • 1
    `I'm trying to learn more` Take a look at the spec if you want to understand things in detail http://es5.github.io – Paul S. Feb 14 '14 at 05:03

5 Answers5

6

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.

Xotic750
  • 22,914
  • 8
  • 57
  • 79
5

implicit check

"1" == 1 //true
1 == 1 //true

explicit check

1 === 1 //true
"1" === 1 //false
4

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.

turnt
  • 3,235
  • 5
  • 23
  • 39
2

Ans:

Due to lose type checking

Equal (==) If the two operands are not of the same type, JavaScript converts the operands, then applies strict comparison. If either operand is a number or a boolean, the operands are converted to numbers if possible; else if either operand is a string, the string operand is converted to a number if possible. If both operands are objects, then JavaScript compares internal references which are equal when operands refer to the same object in memory.

So always use === operator or use strict mode

Javascript Operators

Deepak Ingole
  • 14,912
  • 10
  • 47
  • 79
1

If you use a == sign javascript will not check for the types. It does an automatic type conversion.

if you use === javascript will check for the types as well. and that will return false for your example.

Konza
  • 2,143
  • 17
  • 30