真值和假值

在JavaScript中,true和false有些复杂。在大多数编程语言中,布尔值true和false仅仅表示true/false结果。在JavaScript中,如abc这样的字符,也可以看作true。

数值类型转换成布尔值
undefinedfalse
nullfalse
布尔值true是true,false是false
+0,-0和NaN都是false,其它都是true
字符串如果字符串长度为零就是false,其它都是true
对象true

让我们用代码来验证上面的总结。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function demo(val){
return val ? console.log('true') : console.log('false');
}

demo(true); // true
demo(false); // false
demo(new Boolean(false)); // true (因为对象始终是true)

demo(''); // false (因为长度为零的字符串为false)
demo('false'); // true (因为长度大于零的字符串都为true)
demo(new String('')); // true (因为对象始终是true)

demo(1); // true
demo(-1); // true
demo(NaN); //false
demo(new Number(NaN));// true (因为对象始终是true)

demo({}); // true (因为对象始终是true)

var obj = { name : '张三' };
demo(obj); // true
demo(obj.name); // true
demo(obj.sex); // false (sex属性不存在为undefined)