核心提示:缘由今天看到一个例子:var a = 0;if(a){console.log(true);}else{console.log(false);}// truevar b = 0;if(b){consol...
缘由
今天看到一个例子:
var a = "0"; if(a){ console.log(true); }else{ console.log(false); } // true var b = 0; if(b){ console.log(true); }else{ console.log(false); } // false
按照javascript来说"0" == 0 为true,那为什么会有两种答案呢?
结论
实际上是因为:
任何一个值,只要它不是 undefined、null、 0、NaN或空字符串(""),那么无论是任何对象,即使是值为假的Boolean对象,在条件语句中都为真。
上面例子中的a是假的Boolean对象,但是在条件语句中依旧为真,所以最后输出的是true;而b是0,所以在条件语句中为false,输出false。
var c = undefined; if(c){ console.log(true); }else{ console.log(false); } // false var d = null; if(d){ console.log(true); }else{ console.log(false); } // false var e = NaN; if(e){ console.log(true); }else{ console.log(false); } // false var f = ""; // 空字符串 if(f){ console.log(true); }else{ console.log(false); } // false var g = " "; // 空格,虽然在javascript中 `" " == false`为true,但是它是一个假的Boolean对象,所以在条件语句中依旧为真。 if(g){ console.log(true); }else{ console.log(false); } // true var h = []; if(h){ console.log(true); }else{ console.log(false); } // true var i = {}; if(i){ console.log(true); }else{ console.log(false); } // true var j = function(){}; if(j){ console.log(true); }else{ console.log(false); } // true