javascript : instanceof,typeof,constructor

数据类型

javascript中包含6种数据类型:undefined、null、string、number、boolean和object。其中,前5 种是原始数据类型,object是对象类型。

object类型中包括Object、Function、String、Number、Boolean、Array、Regexp、Date、 Globel、Math、Error,以及宿主环境提供的object类型。

通常在javascript中进行类型判断主要通过3种方式:typeof、instanceof、constructor。

 

 typeof

typeof用以获取一个变量的类型,typeof一般只能返回如下几个结果:number,boolean,string,function,object,undefined。

我们可以使用typeof来获取一个变量是否存在,如if(typeof a!="undefined"){},而不要去使用if(a)因为如果a不存在(未声明)则会出错,对于Array,Null等特殊对象使用typeof一律返回object,这正是typeof的局限性。

  constructor

有时候我们可能会很偷懒的使用a.constructor == String进行类型判断,但是constructor其实是不靠谱的东西。

通过constructor并不能判断出对象实例类型的继承关系。因为javascript的继承其实是通过原型链实现的。

另外,null.constructor会抛出运行时的TypeError,所以使用constructor除了不靠谱外,还可能伴随着异常的风险。

 

 instanceof

关于object类型的判断,使用instanceof判断是比较靠谱的方法。

instanceof所做的事情是,先取出类型对象(String) 的prototype成员(String.prototype),然后和要判断类型的对象(a)的原型链中的对象逐个比较。

当发现是一个对象的时候返回 true,原型链中当前节点是null的时候返回false。

 如果我们希望获取一个对象是否是数组,或判断某个变量是否是某个对象的实例则要选择使用instanceof。

instanceof用于判断一个变量是否某个对象的实例,如var a=new Array();alert(a instanceof Array);会返回true,同时alert(a instanceof Object)也会返回true; 这是因为Array是object的子类.

posted @ 2012-07-10 18:13  lblu  阅读(238)  评论(0)    收藏  举报