JS中的instanceof和typeof

原文链接:http://hi.baidu.com/pryzjvvpkkbhjyq/item/440fb91cda5cb90b8ebde43f


typeof用以获取一个变量的类型

语法:typeof a 或 typeof(a) 

一般只能返回如下几个结果:number、boolean、string、function、object、undefined。

我们可以使用typeof来获取一个变量是否存在,如:if(typeof a != "undefined"){}

而不要去使用if(a),因为如果a不存在(未声明)则会出错

对于Array、Null等特殊对象,使用typeof一律返回object,这正是typeof的局限性。

 

instanceof用于判断一个变量是否某个对象的实例

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

var a=new Array();
alert(a instanceof Array);//输出true
alert(a instanceof Object);//输出true,因为Array是object的子类。

再如:

function test(){};
var a=new test();
alert(a instanceof test);//输出true。

 

谈到instanceof,这里顺便插入一个问题,就是function的arguments(一个可以访问函数的所有参数的对象,类似数组,实际上不是数组对象)

我们大家也许都认为arguments是一个Array,因为其具有数组一样的访问性质及方式

可以由arguments[n]来访问对应的单个参数的值,并拥有数组长度属性length

但如果使用instanceof去测试会发现arguments不是一个Array对象,尽管看起来很像。

function Person(name, sex){
       this.name = name;
       this.sex = sex;
       alert(typeof(arguments)); //输出Object
       alert(arguments instanceof Object); //输出true
       alert(arguments instanceof Array); //输出false
}
var person = new Person(); alert(person instanceof Person); //输出true alert(typeof(person)); //输出Object




posted @ 2014-03-15 20:06  前端攻城师-CZF  阅读(463)  评论(0编辑  收藏  举报