This is because the equality operator == does type coercion, meaning that the interpreter implicitly tries to convert the values before comparing.
but, 0 == '' , I dont understand why it returns true. Can any one explain? what is 0 converted to ? and what is '' converted to to return true ?
-
developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…user400654– user4006542014年05月06日 20:59:13 +00:00Commented May 6, 2014 at 20:59
-
javascriptweblog.wordpress.com/2011/02/07/…MBK– MBK2014年05月06日 21:15:02 +00:00Commented May 6, 2014 at 21:15
1 Answer 1
When abstractly comparing a string and a number, regardless of the order, the string will be converted ToNumber() for the comparison:
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.
In the case of 0 == "", ToNumber("") results in 0, which is exactly the other value:
0 == "" // becomes...
0 == 0 // becomes...
true
Note: You can see how the internal-onlyToNumber() handles different values by using the Number() constructor without new:
console.log(Number(""))
// 0