ECMAScript中有5种简单数据类型:Undefined、Null、Boolean、 Number、和String。还有一个复杂数据类型--Object。
ECMAScript不支持任何创建自定义类型的机制,所以值都成为以上6中数据类型之一。
一.typeof操作符
typeof操作符是用来检测变量 数据类型,对于值或者变量所以typeof
操作符会返回如下字符串:
var box; alert(typeof box); //box是Undefined类型,值是undefined,类型返回的字符串是undefined var box=true; alert(typeof box); //box是Boolean类型,值是true,类型返回的字符串是boolean var box=100; alert(typeof box); //box是Number类型,值是100,类型返回的字符串是number var box='秦肯'; alert(typeof box); //box是String类型,值是秦肯,类型返回的字符串是String var box=null; alert(typeof box); //box是Null类型,值是null,类型返回的字符串是Object var box={}; alert(typeof box); //box是Object类型,值是[object Object],类型返回的字符串是Object var box=new Object; alert(box); //box是Object类型,值是[object Object],类型返回的字符串是Object function box(){ } alert(typeof box); //box是Function类型,值是function box(){},类型返回的字符串是function
typeof 操作符可以操作变量,也可以操作字面量。虽然也可以这样使用:typeof(box),但是 typeof是操作符而非内置函数。
ps:函数在ECMAScript中是对象,不是一种数据类型。所以,使用typeof来区分function和object是非常有必有的。
二. Undefined类型
Undefined类型只有一个值,即特殊的undefined.在使用var声明变量,但没有对其初始化时,这个
变量的值就是undefined。
var box; alert(box); var box=undefined; //没有必要 alert(box)
ps:我们没有必要显示给一个变量赋值为undefined,因为没有赋值的变量会隐式的(自动的)赋值为
undefined;而undefined主要的目的是为了用于比较,ECMAScript第3版之前并没有引入这个值,
引入之后为了正式区分空对象与未经初始化的变量。
未初始化的变量与根本不存在的变量(未声明的变量)也是不一样的。
var box; alert(age); //age is not defined var box; alert(typeof box); //undefined alert(typeof age); //undefined
ps:如果typeof box,typeof age 都返回的undefined.从逻辑上考虑,他们的值,一个是undefined,
一个报错;他们的类型,可是都是undefined.所以,我们的定义变量的时候,尽量可能的不要只声明,不赋值。
三.Null 类型
Null类型是一个只有一个值的数据类型,即特殊的值null。它表示一个空对象引入(指针),而
typeof操作符检测null会返回object.
var box=null; alert(typeof box);
如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null,这样,当检测
null值就知道是否已经变量是否已经分配了对象引用了。
var box=null; if(box !=null){ alert('box 对象已存在!'); }
有个要说明的是:undefined是派生自null的,因此ECMA-262规定对它们的相等性测试返回true.
alert(undefined==null); //它们都是空的,所以true alert(undefined===null); //数据类型必须相等才可以
由于undefined和null两个值的比较是相等的,所以,未初始化的变量和赋值为null的变量会相等。
这时,可以采用typeof变量的类型进行比较。但是建议还是养成编码的规范,不忘记初始化变量。
alert(typeof undefined==typeof null); //false
四.Boolean类型
Boolean类型有两个值(字面量):true和false.而true不一定等于1,false不一定等于0,Javascript是区分
大小写的,True和False或者其他都不是Boolean类型的值。
var box=true; alert(typeof box); //Boolean
虽然Boolean类型的字面量只有true和false两种,都是ECMAScript中所以的类型值都是与这两个Boolean
值等价的值。要将一个值转换为其对应的Boolean值,可以使用转型函数Boolean()。
var hello="hello world"; var hello1=Boolean(hello); alert(typeof hello1);//Boolean*/
上面是一个显示转换,属于强制行转换。而实际应用中,还有一种隐式转换。比如:
在if条件语句里面的条件判断,就存在隐式转换。
var hello=""; if(hello){ alert("真"); }else{ alert("假"); }