JavaScript中if (xx)和a==b的判断

2018-05-07  本文已影响231人  C脖子

JavaScript中的很多操作都会有隐含的类型转换,这可能会导致一些违反直觉的结果。

if (xx) 的判断

JS的if语句会先对括号内的表达式求值,然后将表达式的结果转换为boolean类型再做判断。转换成boolean类型时遵循下列规则:

示例:

/* 字符串 */
if ("hello") {
  console.log("true");
} // true

if ("") {
  console.log("true");
} // true

if (" ") {
  console.log("true");
} // true

if ("0.00") {
  console.log("true");
} // true

/* 数值 */
if (0.00) {
  console.log("true");
} // false

/* 对象 */
if ({}) {
  console.log("true");
} // true

if ([]) {
  console.log("true");
} // true

相等操作符 ==

JavaScript中有两种相等运算符,=====
当两个操作数的类型相同时,=====没有什么区别,
当两个操作数的类型不同时,===会直接返回false,而==会先转换操作数的类型,再比较它们是否相等。

"666" == 666 // true,转换后相等
“666" === 666 // false,因为数据类型不同

在转换操作数的类型时,==!=遵循以下规则:

false -- 0 // true
true -- 1 // true
"" == true // false,空字符转为数值是0
"5" == 5 // true
"str" == 5 // false,"str"转换为数值是NaN
"NaN" == NaN // false,NaN不等于任何数值
[] == false // true, [].valueOf()仍返回[], [].toString返回""空字符串
[0] == true // false, 这什么鬼
["0.00"] == true // false

还有一些其他的规则

null == undefined // true
null == 0 // false
undefined == 0 // false
NaN == NaN // false
NaN != NaN // true
var obj1 = {};
var obj2 = {};
console.log(obj1 == obj2); // false

var obj1 = {};
var obj2 = obj1;
console.log(obj1 == obj2); // true

相等和严格相等

使用相等==会进行隐含的类型转换,所以建议不言使用==,只是用严格相等运算符===

0 == ''// true
1 == true // true
2 == true // false
0 == '0' // true
false == 'false' // false
false == '0' // true
' \t\r\n ' == 0 // true
上一篇 下一篇

猜你喜欢

热点阅读