首先是最基本的判断方法:通过typeof运算符
JavaScript里面有五种基本类型和引用类型。用typeof只能区分并判断出基本类型。
举个例子
alert(typeof 1); // 返回字符串"number"
alert(typeof "1"); // 返回字符串"string"
alert(typeof true); // 返回字符串"boolean"
alert(typeof {}); // 返回字符串"object"
alert(typeof []); // 返回字符串"object "
alert(typeof function(){}); // 返回字符串"function"
alert(typeof null); // 返回字符串"object"
alert(typeof undefined); // 返回字符串"undefined"
对象是对象,数组也是对象,js万物皆对象,typeof能力有限
-
原型判断,Array.prototype.isPrototypeOf(obj)
利用isPrototypeOf()方法,判定Array是不是在obj的原型链中,如果是,则返回true,否则false。
-
构造函数,obj instanceof Array
使用 instanceof 就是判断一个实例是否属于某种类型 这个方法不是特别靠谱,不同的框架中创建的数组不会相互共享其prototype属性!!
-
根据对象的class属性,跨原型链调用toString()方法
调用对象原型中的toString方法, Object.prototype.toString.call(obj);因为很多对象继承的toString()方法被重写了。
function _getClass(o){
if(o===null) return "Null"; if(o===undfined) return "undefined"; return Object.prototype.toString.call(o).slice(8,-1);
}
-
Array.isArray()方法
Array.isArray([1, 2, 3]); // true
Array.isArray({foo: 123}); // false
Array.isArray('foobar'); // false
Array.isArray(undefined); // false不推荐,有些环境下可能不支持isArray()方法
综合
推荐使用第三种方法
判断:
Object.prototype.toString.call(arg) === '[object Array]'
其它判断原理类似。