1、使用typeof操作符
对于String,Number,Undefined,Function等几种类型的对象来说,使用typeof操作符完全可以胜任,但是当检测Array类型时,就有点捉襟见肘了。例如:
var arr = [1,2,3,4,5];
typeof(arr); //返回的是object
2、使用instanceof操作符(typeof的改进)
使用instanceof操作符,返回的是一个布尔值(true或者false),从而指出该对象是否是特定类的一个实例。
instanceof操作符针对基本情况大都适用,但是当instanceof在跨frame对象构建的场景下使用会失效。
3、使用toString()方法(即Object.prototype.toString.call()方法,相对较为准确,建议使用)
我们知道,每个对象都有一个toString()方法。默认情况下,toString()方法被每个Object对象继承。如果toString()方法在自定义对象中未被覆盖,调用toString()方法返回“[object type]”,其中type是对象的类型。例如:
var o = new Object();
o.toString(); //返回的是 [object Object]
那么判断数组是不是用 arr.toString()呢?No!!!不是这样的。我们首先想的是Array继承Object,也会有toString()方法呀。为什么不可以呢?
虽然Array继承Object,有toString()方法,但是这个方法有可能会被改写而达不到我们的要求,所以我们会用
Object.prototype.toString.call()来保证其“纯洁性”,从而达到我们的要求。例如:
var arr = new Array(1,2,3,4,5);
Object.prototype.toString.call(arr); //返回的是[object Array]