数据类型
ECMAScript中的数据 类型分为简单的数据类型和复杂数据类型,简单数据类型又称为基本数据类型,包括Undefined、Null、Boolean、Number和 String5种,复杂数据类型包括Object、Array、Date、RegExp、Function、基本包装类型和内置对象7种类型。
由于ECMAScript是松散数据类型的,因此我们不能够通过变量的定义来确定变量到底是什么数据类型,ECMAScipt为我们提供了typeof操作符来确定变量的数据类型。对一个值使用typeof操作符可能返回下列的某个字符串:
undefined:如果这个值未定义
boolean:如果这个值是布尔值
string:如果这个值是字符串
number:如果这个值是数值
object:如果这个值是对象或null
function:如果这个值是函数
具体使用如下实例:
function test(){ alert("hello!"); } var msg = "Hello World!"; document.write(typeof (123)); //输出 number document.write(typeof ("abc")); //输出string document.write(typeof (test)); //输出function document.write(typeof false); //输出boolean document.write(typeof msg);
typeof操作符操作的可以是变量,也可以是具体的值,有一点需要注意的是:typeof是一个操作符而不是函数,所以typeof后面的被操作值的圆括号不是必须的。
Undefined类型
Undefined类型只有一个值:undefined。在使用var定义变量但未被初始化时的值就是undefined,这个去上面已经提到过。在这里有一个知识点,可以看一下,但是不是必须知道的,就是在ECMAScript-262第三版之前的版本中没有定义这个值,在第三版中正式引入了这个值是为了正氏区分空对象指针和未经初始化的变量。对于未经初始化的变量只能执行一项操作,就是使用typeof操作符检测该变量的数据类型。
虽然未经初始化的变量能被自动的赋予undefined值,但是仍然建议显示初始化变量,因为这样当使用typeof操作符检测一个变量的时候,可以根据返回值来确定该变量是没有被声明还是没有被初始化的了。
Null类型
在ECMAScript中,只有两种数据类型只有一个值,Undefined是第一个,Null是第二个。从逻辑角度来看,null是一个指向空对象指针,也就是这个原因,当使用typeof操作符检测null类型是object了。如果新定义一个变量为了将来保存对象,那么最好就将该变量赋一个null的初始值,这样就可以通过typeof操作符检测该变量的值是否为null就可以知道变量是否已经保存了一个对象的引用了。如下实例所示:
if(dog != null){ alert("已被初始化对象"); }
这里有一个知识点,就是undefined值是派生自null的,所以在ECMAScript-262规定对它们相等性的操作时返回true,如下代码所示:
document.write(null == undefined); //返回true
上面提到了在做null和undefined的相等操作时会返回true,但它们并不完全相同。在上面提到了在声明一个变量但未赋初始值的时候,这个变量会被自动赋予一个undefined值,但是没必要给一个新定义的变量显示的undefined值,但是这个道理并不适用于null,如果一个变量将来为了保存对象类型数据但是并没赋值,就可以显示的初始一个null值。