基本概念(2)
数据类型
ECMAScript中有5种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number、String。还有一种复杂数据类型——Object,本质上是由一组无序的名值队组成。ECMAScript不支持任何创建自定义类型机制,所有值都是上述6种数据类型之一。由于ECMAScript数据类型具有动态性,因此没有再定义其他数据类型的必要。
1. typeof 操作符
因为ECMAScript是松散类型的,所以typeof操作符就是用来检测给定变量的数据类型的。对一个值使用typeof操作符可能返回下列某个字符串:
"undefined"——如果这个值未定义;
"boolean"——如果这个值是布尔值;
"string"——如果这个值是字符串;
"number"——如果这个值是数值;
"object"——如果这个值是对象或null;
"function"——如果这个值是函数。
var message="some string"; alert (typeof message);//"string" alert (typeof (message));//"string" alert (typeof 95);//"number"
typeof 操作符的操作数可以使变量(message),也可以是数值字面量。
函数在ECMAScript 中是对象,不是一种数据类型。函数也确实有一些特殊的属性,因此通过typeof操作符来区分函数和其他对象是有必要的。
2.Undefined 类型
Undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。
即便未初始化的变量会自动被赋予undefined值,但初始化变量依然是明智的选择。如果能做到这一点,那么当typeof操作符返回"undefined"值时,我们就知道被检测的变量还没有被声明,而不是尚未初始化。
3. Null 类型
从逻辑角度来看,null值表示一个空对象指针,而这也正式使用typeof操作符检测null值时会返回"object"的原因。
var car = null; alert (typeof car);//"object"
undefined 值是派生自null 值的,位于null和undefined之间的相等操作符(==)总是返回true。尽管null和undefined有这样的关系,但是它们的用途完全不同。只要意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值。这样做不仅可以体现null作为空对象指针的惯例,而且也有助于进一步不区分null和undefined。
4. Boolean 类型
这是ECMAScript中使用得最多的一种类型,该类型只有两个字面值:true和false。这两个与数字值不是一回事,因此true不一定等于1,而false也不一定等于0。
需要注意的是,Boolean类型的字面值true和false是区分大小写。
虽然Boolean类型的字面值只有两个,但ECMAScript中所有类型的值都有与这两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean(),如:
var message ="Hello world!"; var messageAsBoolean = Boolean(message);
字符串message被转换成了一个Boolean值,该值被保存在messageAsBoolean变量中。可以对任何数据类型的值调用Boolean()函数,而且总会返回一个Boolean值。至于是返回true还是false,取决于要转换的数据类型及其实际值。
转换规则:
数据类型 转换为true的值 转换为false的值
| Boolean | true | false |
| String | 任何非空字符串 | ""(空字符串) |
| Number | 任何非零数字值(包括无穷大) | 0和NaN |
| Object | 任何对象 | null |
| Undefined | n/a | undefined |
这些转换规则对理解流控制语句(如if语句)自动执行相应的Boolean转换非常重要。
在使用时应该确切地知道在流控制语句中使用的是什么变量至关重要,错误地使用一个对象而不是一个Boolean值,就有可能彻底改变应用程序的流程。
浙公网安备 33010602011771号