Boolean函数在不同的参数下的返回值:
数据类型 | 转换为true的值 | 转换为false |
---|---|---|
Boolean | true | false |
String | 非空字符串 | “”(空字符串) |
Number | 非零数值(包括无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | ---- | undefined |
示例:
var a;
console.log(a == undefined); // true
console.log(Boolean(a)); // false
当一个变量只被声明却没初始化时,其默认等于undefined。
var a = "";
console.log(a == null); // false
console.log(Boolean(a)); // false
console.log(Boolean(null)); // false
既然a和null都是false,为什么两个却不相等呢?a为空字符串,所以Boolean(a)返回false能够理解(见上表),而Boolean(null)等于false也是可以理解的,a 与 null不相等就有点费解了,不急,继续看一个例子:
var arr = [];
console.log(arr == null); // false
console.log(Boolean(arr)); // true
console.log(arr == false); // true
这时候出现了一些更神奇的事情,空数组既等于真又为假?这时候我们就要正确的理解Boolean与相等操作符的区别了,看看相等操作符的规则:
- 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值,false转换为0,true转换为1;(最后一个例子)
- 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;
- 如果一个操作数是对象,另一个不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较。
- null和undefined是相等的;
- 比较相等性之前,不能讲null和undefined转换成其他的任何值。(第二个例子)
- 如果有一个操作数是NaN,则相等操作符返回false,不等操作符返回true,即使是NaN == NaN此比较也返回false;
- 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true,否则返回false。
if (arr.length == 0) {
// body
}
if (arr == false) {
// body
}
if (arr) {
// 此用法不行,因为此用法等同于if (Boolean(arr))
}