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语句.
谁有人解释为什么?
在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会输入强制性,这是性能损失,并不总是产生预期结果,如上面的比较图表所示.
| 归档时间: |
|
| 查看次数: |
1163 次 |
| 最近记录: |