本章内容
- 数据类型(只包含了要点,详细请参考原书)
- typeof 操作符
ECMAScript 有 5 种简单数据类型(也称为基本数据类型):
- Undefined
- Null
- Boolean
- Number
- String
还有一种复杂数据类型:
- Object
ECMAScript不支持任何创建自定义类型的机制,而所有值最终都将是上述 6 种数据类型之一。
鉴于 ECMAScript 是松散类型的,因此需要有一种手段来检测给定变量的数据类型。对一个值使用 typeof 操作符可能会返回下列某个字符串。
- "undefined":如果这个值未定义
- "boolean":如果这个值是布尔值。
- "string":如果这个值是字符串。
- "number":如果这个值是数值。
- "object":如果这个值是对象或 null。
- "function":如果这个值是函数。
Undefined 类型只有一个值,即特殊的 undefined 。下面有两个例子,注意尚未定义的变量。
var message;
//下面这个变量没有声明
//var age;
alert(message); //"undefined"
alert(age); //产生错误
对于未声明过的变量,只能执行一项操作,即使用 typeof 操作符检测其数据类型。结果也会返回 undefined 值。来看下面的例子:
var message;
//下面这个变量没有声明
//var age;
alert(typeof message); //"undefined"
alert(typeof age); //"undefined"
Null 类型只有一个值,即特殊的 null 。逻辑上来讲,null 值表示一个空对象指针,这也是 typeof 操作符检测 null 值会返回 "object" 的原因。
实际上, undefined 值是派生自 null 值的,因此 ECMA-262 规定他们的相等性测试要返回 true 。
console.log(null == undefined); //true
Boolean 类型是 ECMAScript 中使用的最多的一种类型,该类型只有两个字面值:true 和 false 。这两个值与数字值不是一回事,因此 true 不一定等于 1 ,false 也不一定等于 0 。
转型函数 Boolean( ) 可以将其他值转换为对应的 Boolean 值,下表给出了各种数据类型以及对应转换规则 。
数据类型 | 转换为 true 的值 | 转换为 false 的值 |
---|---|---|
Undefined | / | undefined |
Boolean | true | false |
Number | 任何非 0 数字值 | 0 和 NaN |
String | 任何非空字符串 | 空字符串 |
Object | 任何对象 | null |
Object 的每个实例都具有下列属性和方法:
- constructor :用于创建当前对象的函数。
- hasOwnProperty ( propertyName ) :用于检查给定的属性是否在当前对象实例中是否存在(而不是在实例的原型中)。参数必须以字符串形式指定。
- isPrototypeOf ( object ) :用于检查传入的对象是否是当前对象的原型。
- propertyIsEnumerable ( propertyName ) :用于检查给定的属性是否能够用 for-in 语句来枚举。
- toLocaleString( ) :返回对象的字符串表示,该字符串与执行环境的地区对应。
- toString( ) :返回对象的字符串表示。
- valueOf( ) :返回对象的字符串、数值或布尔值表示。通常与 toString( ) 方法的返回值相同。
从技术角度讲,浏览器环境中的对象,比如 BOM 和 DOM 中的对象,都属于宿主对象,因为他们是由宿主实现提供和定义的。ECMA-262 不负责定义宿主对象,因此宿主对象可能不会继承 Object 。