- typeof 对于Function、String、Number、Undefined等几种类型,完全可以胜任,但是当对象是Array时,
var arr = [1,2,3,4];
alert(typeof arr); //object
- instanceof 返回一个Boolean值,指出对象是否是特定的一个实例,使用
var arr = [1,2,3,4];
alert(arr instanceof Object); //true这是由于Array是Object的子类
alert(arr instanceof Array); //true
- Array.isArray()
// 下面的函数调用都返回 true
Array.isArray([]);
Array.isArray([1]);
Array.isArray(new Array());
// Array.prototype 也是一个数组。
Array.isArray(Array.prototype);
当检测Array实例时, Array.isArray 优于 instanceof,因为Array.isArray能检测iframes.
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
xArray = window.frames[window.frames.length-1].Array;
var arr = new xArray(1,2,3); // [1,2,3]
Array.isArray(arr); // true
arr instanceof Array; // false
- 原型链
var arr = [1,2,3,4];
console.log(arr.__proto__.constructor == Array);//true
console.log(arr.constructor == Array);//true
- Object.prototype.toString:首先,取得对象的一个内部属性[[Class]],然后依据这个属性,返回一个类似于"[object Array]"的字符串作为结果.利用这个方法,再配合call,我们可以取得任何对象的内部属性[[Class]],然后把类型检测转化为字符串比较,以达到我们的目的。
var arr = [1,2,3,4];
Object.prototype.toString.call(arr) == "[object Array]";//true
toString.apply(arr) == "[object Array]";//true;
//不能使用Array.isArray(),就采用以下方法
if (!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
}
- isArray() jquery已经封装了方法判断是否是数组
var arr = [1,2,3];
console.log($.isArray(arr));//true