ECMAScript 中有5 种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number
和String。还有1 种复杂数据类型——Object,Object 本质上是由一组无序的名值对组成的。ECMAScript
不支持任何创建自定义类型的机制,而所有值最终都将是上述6 种数据类型之一。乍一看,好像只有6
种数据类型不足以表示所有数据;但是,由于ECMAScript 数据类型具有动态性,因此的确没有再定义
其他数据类型的必要了。
typeof操作符:检测给定变量的数据类型
对一个值使用typeof 操作符可能返回下列某个字符串:
- "undefined"——如果这个值未定义;
- "boolean"——如果这个值是布尔值;
- "string"——如果这个值是字符串;
- "number"——如果这个值是数值;
- "object"——如果这个值是对象或null;
- "function"——如果这个值是函数。
1、Undefined类型
Undefined 类型只有一个值,即特殊的undefined。在使用var 声明变量但未对其加以初始化时,
这个变量的值就是undefined,例如:
var message;
alert(message == undefined); //true
2、Null类型
Null 类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null 值表
示一个空对象指针,而这也正是使用typeof 操作符检测null 值时会返回"object"的原因,如下面
的例子所示:
var car = null;
alert(typeof car); // "object"
实际上,undefined 值是派生自null 值的,因此ECMA-262 规定对它们的相等性测试要返回true:
alert(null == undefined); //true
3、Boolean类型
Boolean 类型是ECMAScript 中使用得最多的一种类型,该类型只有两个字面值:true 和false。
需要注意的是,Boolean 类型的字面值true 和false 是区分大小写的。也就是说,True 和False
(以及其他的混合大小写形式)都不是Boolean 值,只是标识符。
可以对任何数据类型的值调用Boolean()函数,而且总会返回一个Boolean 值。至于返回的
这个值是true 还是false,取决于要转换值的数据类型及其实际值。
var message = "Hello world!";
var messageAsBoolean = Boolean(message);
数据类型 | 转换为true的值 | 转换为false的值 |
Boolean | true | false |
String | 任何非空字符串 | ""(空字符串) |
Number | 任何非零数字值(包括无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | 不适用 | undefined |
4、Number类型
var intNum = 55; // 十进制整数
var octalNum1 = 070; // 八进制的56 `第一位必须是零(0)
var hexNum1 = 0xA; // 十六进制的10 `前两位必须是0x
var floatNum2 = 0.1; // 浮点数值
NaN,即非数值(Not a Number)是一个特殊的数值
NaN 本身有两个非同寻常的特点。首先,任何涉及NaN 的操作(例如NaN/10)都会返回NaN,这
个特点在多步计算中有可能导致问题。其次,NaN 与任何值都不相等,包括NaN 本身.
针对NaN 的这两个特点,ECMAScript 定义了isNaN()函数。这个函数接受一个参数,该参数可以
是任何类型,而函数会帮我们确定这个参数是否“不是数值”。isNaN()在接收到一个值之后,会尝试
将这个值转换为数值。某些不是数值的值会直接转换为数值,例如字符串"10"或Boolean 值。而任何
不能被转换为数值的值都会导致这个函数返回true.
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false(10 是一个数值)
alert(isNaN("10")); //false(可以被转换成数值10)
alert(isNaN("blue")); //true(不能转换成数值)
alert(isNaN(true)); //false(可以被转换成数值1)
有3 个函数可以把非数值转换为数值:Number()、parseInt()和parseFloat()。
5、String类型
String 类型用于表示由零或多个16 位Unicode 字符组成的字符序列,即字符串。字符串可以由双
引号(")或单引号(')表示,因此下面两种字符串的写法都是有效的:
var firstName = "Nicholas";
var lastName = 'Zakas';
ECMAScript 中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。要改变
某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量
要把一个值转换为一个字符串有两种方式。第一种是使用几乎每个值都有的toString()方法
- 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果;
- 如果值是null,则返回"null";
- 如果值是undefined,则返回"undefined"。
6、Object类型
ECMAScript 中的对象其实就是一组数据和功能的集合。对象可以通过执行new 操作符后跟要创建
的对象类型的名称来创建。而创建Object 类型的实例并为其添加属性和(或)方法,就可以创建自定
义对象,如下所示:
var o = new Object();
Object 的每个实例都具有下列属性和方法。
- constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)
就是Object()。 - hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例
的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例
如:o.hasOwnProperty("name"))。 - isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型(第5 章将讨论原
型)。 - propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in 语句
(本章后面将会讨论)来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符
串形式指定。 - toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
- toString():返回对象的字符串表示。
- valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值
相同。