原文链接: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