Javascript中的空格是否等于整数0?

mas*_*san 2 javascript whitespace

我的应用程序行为异常,并认为下面的代码意外地发出了其他声明.

if(" " != 0) {
    console.log("whitespace is not zero");
}
else {
    console.log("bar");
}
Run Code Online (Sandbox Code Playgroud)

Firebug输出

bar
Run Code Online (Sandbox Code Playgroud)

我认为空格是一个字符串,与整数零的比较应该像上面的情况一样返回false,但我不知道为什么它会转到else语句.

谁有人解释为什么?

Sar*_*raz 7

在JS," " == 0等于true松动/宽大的比较,你应该使用全等运算符 ===/!==改为:

" " !== 0
Run Code Online (Sandbox Code Playgroud)

达到第一个条件.


测试:

console.log(" " == 0); // true
console.log(" " === 0); // false
Run Code Online (Sandbox Code Playgroud)

宽松的比较图表:

""           ==   "0"           // false
0            ==   ""            // true
0            ==   "0"           // true
false        ==   "false"       // false
false        ==   "0"           // true
false        ==   undefined     // false
false        ==   null          // false
null         ==   undefined     // true
" \t\r\n"    ==   0             // true
Run Code Online (Sandbox Code Playgroud)

严格的比较图表:

""           ===   "0"           // false
0            ===   ""            // false
0            ===   "0"           // false
false        ===   "false"       // false
false        ===   "0"           // false
false        ===   undefined     // false
false        ===   null          // false
null         ===   undefined     // false
" \t\r\n"    ===   0             // false
Run Code Online (Sandbox Code Playgroud)

(Douglas Crockford的例子)


良好做法:

只要有可能,使用严格相等运算符,因为使用松散相等运算符,JS会输入强制性,这是性能损失,并不总是产生预期结果,如上面的比较图表所示.