• 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
posted on 2018-09-19 09:27  dqy95  阅读(250)  评论(0编辑  收藏  举报