JavaScript数据类型(四)IF 转换规则

多言多败,多事多害。——《训蒙增广》

简介

在 JavaScript 中使用 if 的时候,自己如果不注意的话很可能出现判断进错,其实在 JavaScript 中只有`固定的几个值会转为 false,其它的统一认为为 true。

  • false
  • null
  • undefined
  • 空字符串' '
  • 数字零 0
  • NaN

其他的全部都算为 true,'false''0'也是为 true,其实这也是一种隐性的类型转换。和 == 又有不同。

逻辑运算符

由于逻辑表达式是从左往右计算的,由于运算符优先级的存在,下面的表达式的结果却不相同。如下例所示

1
2
(false && true) || true; // 结果为 true
false && (true || true); // 结果为 false

右侧被小括号括起来的操作变成了独立的表达式。
转换规则:

逻辑与(&&)

尽管 &&|| 运算符能够使用非布尔值的操作数, 但它们依然被看作是布尔操作符,因为它们的返回值总是能够被转换为布尔值
expr1 && expr2
如果expr1能转换为false则返回expr1,否则返回expr2。因此,与布尔值一起使用时,如果两个操作数都为true&&返回true,否则返回false.

1
2
3
4
5
6
7
a1 = true && true; // t && t 结果为 true
a2 = true && false; // t && f 结果为 false
a3 = false && true; // f && t 结果为 false
a4 = false && 3 == 4; // f && f 结果为 false
a5 = 'Cat' && 'Dog'; // t && t 结果为 Dog
a6 = false && 'Cat'; // f && t 结果为 false
a7 = 'Cat' && false; // t && f 结果为 false

逻辑与(||)

expr1 && expr2
如果expr1能转换为true则返回expr1,否则返回expr2。因此,与布尔值一起使用时,如果任意一个操作数为true||返回true.

1
2
3
4
5
6
7
o1 = true || true; // t || t 结果为 true
o2 = false || true; // f || t 结果为 true
o3 = true || false; // t || f 结果为 true
o4 = false || 3 == 4; // f || f 结果为 false
o5 = 'Cat' || 'Dog'; // t || t 结果为 Cat
o6 = false || 'Cat'; // f || t 结果为 Cat
o7 = 'Cat' || false; // t || f 结果为 Cat

逻辑非(!)

!expr 如果单个表达式能转换为true的话返回false,否则返回true

1
2
3
n1 = !true; // !t 结果为 false
n2 = !false; // !f 结果为 true
n3 = !'Cat'; // !t 结果为 false

总结

在 JavaScript 中使用 if 的时候,自己如果不注意的话很可能出现判断进错,其实在 JavaScript 中只有固定的几个值会转为 false,其它的统一认为为 true

  • false
  • null
  • undefined
  • 空字符串' '
  • 数字零 0
  • NaN