为什么JavaScript认为值0
等于空字符串?
defValue = 0;
if ( defValue == '' ) defValue = null;
alert( defValue ); // alerts null
defValue = 1;
if ( defValue == '' ) defValue = null;
alert( defValue ); // alerts 1
答案 0 :(得分:7)
使用==
检查两个值的相等性时,JavaScript会做一些非常有趣的事情。如果值是不同的类型,例如 Number 和 String ,则必须进行初始转换以使两种类型协调一致。
ECMAScript语言规范提供了用于确定两个值之间相等的算法,以及在两个值不同的情况下将转换的值。
Section 11.9.3,抽象等式比较算法,概述了表达式 x == y 的步骤,这是您在此处查询的内容。请特别注意算法的第4步:
因此,我们的空字符串必须首先转换为数字。根据{{3}}, ToNumber应用于字符串类型,空字符串的数学值为0.
我们的 x == y 表达式现在是 0 == 0 ,显然是true
。
如果您想避免强制转换,则应考虑检查 Strict Equality ,而不是Section 9.3.1中所述。如果两个值不是同一类型,则算法立即返回false
。
答案 1 :(得分:3)
简短:==进行任何必要的类型转换,然后进行评估,因此在这种情况下,转换后的空字符串与0的类型相同;
0 == '' // return true.
所以你需要使用严格的比较(===);
0 === '' // return false;
长: