数据类型
JavaScript中包含5种简单数据类型:Boolean、Number、String、Undefined、Null。还有一种复杂数据类型Object。Object是一种对象类型,包括:Object、Function、String、Number、Boolean、Array、Regexp、Date、 Globel、Math、Error,以及宿主环境提供的Object类型。
typeof运算符
typeof运算符用来检测表达式的类型,其结果为一个表示该表达式数据类型的字符串。
表达式值 | 返回结果 |
---|---|
Undefined | "undefined" |
Null | "object" |
Boolean | "boolean" |
Number | "number" |
String | "string" |
Object(没有实现[[Call]]属性的内建对象) | "object" |
Object(实现了[[Call]]属性的内建对象) | "function" |
Object(host对象) | 由实现决定 |
Undefined数据类型
Undefined数据类型只有一个值,那就是undefined(注意区分大小写)。当定义了一个变量而未对该变量赋值时,那么该变量的值就是undefined。
var a;
alert(a); //"undefined"
Null数据类型
Null数据类型仅有一个值,就是null(注意区分大小写)。从逻辑角度来看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null时会返回"object"的原因。
var a = null; alert(typeof a); //"object"
但是实际上并非因为null是"object",而是历史遗留问题。JS创始人也曾讨论并尝试修复typeof null === "null", 但在V8引擎中实现后导致大量问题,因此提案被拒绝。详情参见:http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null
null值可以用在很多情况下,例如:
- 表明变量还没接收到值。
- 变量不在包含值。
- 作为函数的返回值,表明函数没有可以返回的值。
- 作为函数的一个参数,表明省略了一个参数。
此外如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样一来,只要直接检测null值就可以知道相应的变量是否已经保存了一个对象的引用了。
if (a != null){
//对a进行的操作
}
实际上,undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true。
alert(null==undefined);
Boolean数据类型
Boolean为逻辑数据类型,仅有两个值:true和false。在JS中所有的数据类型都可以转化成这两个Boolean值。要将一个值转化成Boolean值,可以调用Boolean()。
var a = "";
alert(Boolean(a)); //false
数据类型 | 转换成true值 | 转换成false值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | "" |
Number | 任何非零数字值 | 0和NaN |
Null | null | |
Object | 任何对象 | |
Undefined | undefined |
Number数据类型
数字是双精度浮点值,浮点值即是带有小数点的数字。有两个常数需要注意。
Infinity
Infinity表示正无穷大,例如一个正数除以0就会返回正无穷大。NaN
NaN表示非数字,这是一个具有IEEE-754标准值的预定义变量。NaN本身有两个非同寻常的特点。首先,任何涉及NaN的操作(例如NaN/10)都会返回NaN,这个特点在多步计算中有可能导致问题。其次,NaN与任何值都不相等,包括NaN本身。
alert(NaN/2); //NaN
alert(NaN==NaN); //false
String数据类型
String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由单引号(')或双引号(")表示。
对于某些特殊的字符,需要使用字符串转义。详情请见:JS中的转义字符
要将一个值转换成字符串有两种方法:
(1)使用数值、布尔值、对象和字符串值的toString()方法。但null和undefined值没有这个方法。
(2)在不知道要转换的值是不是null或undefined的情况下,还可以使用转型函数String()。
这个函数能够将任何类型的值转换为字符串。String()函数遵循下列转换规则:
- 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果
- 如果值是null,则返回"null"
- 如果值是undefined,则返回"undefined"
Object数据类型
对象其实就是一组数据和功能的集合。
属性和方法 | 解释 |
---|---|
constructor | 对一个JavaScript函数的引用,该函数是对象的构造函数。 |
hasOwnProperty( ) | 检查对象是否有局部定义的(非继承的)、具有特定名字的属性。 |
isPrototypeOf( ) | 检查对象是否是指定对象的原型。 |
propertyIsEnumerable( ) | 检查指定的属性是否存在,以及是否能用for/in循环枚举。 |
toLocaleString( ) | 返回对象地方化的字符串表示。该方法的默认实现只调用toString()方法,但子类可以覆盖它,提供本地化。 |
toString( ) | 返回对象的字符串表示。Object类提供的该方法的实现相当普通,并且没有提供更多有用的信息。Object的子类通过定义自己的toString()方法覆盖了这一方法(toString()方法能够生成更有用的结果)。 |
valueOf( ) | 返回对象的原始值(如果存在)。对于类型为Object的对象,该方法只返回对象自身。Object的子类(如Number和Boolean)覆盖了该方法,返回的是与对象相关的原始数值。 |