JavaScript数据类型 - Boolean类型和Null类型

724 阅读3分钟

这是我参与8月更文挑战的第17天,活动详情查看:8月更文挑战

Boolean类型

 Boolean类型是JavaScript中使用的最多的一种类型,该类型只有两个字面值:true和false。这两个值与数字值不是一回事,因此true不一定等于1,而false也不一定等于0。以下是为变量赋值Boolean类型值的例子:

var found = true;
var lost = false;

需要注意的是Boolean类型的字面值true和false是区分大小写的。也就是说True和False(或者其它混合大小写形式)都不是Boolean类型的值,只是标识符。

虽然Boolean类型的字面值只有两个,但ECMAScript中所有类型值,都有于这两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以调用类型转换函数Boolean(),如下所示:

var msg = 'hello world';
var msgAsBool = Boolean(msg);
console.log(msgAsBool);//true

在这个例子中,字符串msg被转换成了Boolean值,该值被保存在msgAsBool变量中。可以对任何数据类型的值调用Boolean()函数,而且总会返回一个Boolean值,至于返回的是true还是false,取决于要转换值的数据类型及其实际值。下表给出了各种数据类型及其对应的转换规则。

数据类型转换为true的值转换为false的值
Booleantruefalse
String任何非空字符串空字符串
Number任何非零的数值(包括无穷大)0和NaN
Object任何对象null
Undefinedundefined

这些转换规则对理解流控制语句自动执行相应的Boolean转换非常重要,看下面的代码:

var msg = 'hello world';
if(msg){
    console.log('value is true');
}

运行这段代码,就会显示一个打印输出 value is true,因为字符串msg被自动转换成了对应的Boolean值true,由于存在这种自动执行的Boolean转换,因此确切的知道在流控制语句中使用的是什么变量至关重要。错误使用一个对象而不是一个Boolean值,就有可能彻底改变应用程序流程。

 Null类型

Null 类型是第二个只有一个值的数据类型,这个特殊的值就是null。从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof检测null值时返回object的原因,如下所示:

var car = null;
console.log(typeof car);// object

如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其它值。这样一来,只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用。比如下面的例子:

if(car != null){
    //对car对象执行某些操作
}

实际上,undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true;

console.log(null == undefined);//true
console.log(null === undefined);//false

上述代码中虽然undefined值派生自null值,用2个等号检测它们是相等的,但实际上它们并不属于同一个类型,所以当我们用3个等号检测时就返回false了。

这里,位于null和undefined之间的相等操作符(==)总是返回true。尽管null和undefined有这样的关系,但它们的用途完全不同,如前所述,无论在什么情况下都没必要把一个变量显示的设置为undefined,可视同样的规则对null却不适用。换句话说,只要意在保存对象的变量还没有真正的保存对象,就应该明确的让该变量保存为null值。这样做不仅可以体现null作为空对象指针的惯例,而且也有助于进一步区分null和undefined。