我们使用外部API whcih返回''或布尔值false,而Javascript似乎找到两者相等。 例如:
var x = '';
if (!x) {
alert(x); // the alert box is shown - empty
}
if (x=='') {
alert(x); // the alert box is shown here too - empty
}
var z = false;
if (!z) {
alert(z); // the alert box is shown - displays 'false'
}
if (z=='') {
alert(z); // the alert box is shown here too - displays 'false'
}
我们如何区分这两者?
答案 0 :(得分:27)
使用三等号
if (x===false) //false as expected
if (z==='') //false as expected
双等于将进行类型转换,而三等于不会。所以:
0 == "0" //true
0 === "0" //false, since the first is an int, and the second is a string
答案 1 :(得分:2)
var typeX = typeof(x);
var typeZ = typeof(z);
if (typeX == 'string' && x == '')
else if (typeX == 'boolean' && !typeX)
我也喜欢Peirix的答案,但这里有另一种选择。
答案 2 :(得分:0)
1 == '1' // true
1 === '1' // false
答案 3 :(得分:0)
为了避免这个问题,请使用jslint验证器。它有助于找到不安全的操作。