JavaScript中如何判断数组类型

前言

JavaScript中关于数组的断定问题,一直都是一个必需要掌握的点,那么,运用知识,如何判断一个类型是数组,就须要有对JavaScript使用有着深刻的了解。javascript

判断方法

1、Array.isArray

ES5新增的数组方法,Array.isArray应该是咱们最早想到的断定方式,如今应用的也比较普遍。java

const arr = [1,2,3,4]
Array.isArray(arr)    // true

  

若是是在支持ES5的浏览器中,用这样的方式天然没什么问题,可是若是是在IE9如下版本,这个方法并未受到支持,这时候咱们就要用别的方式来判断数组。数组

2、instanceof

通常来讲,instanceof关键字,是用来判断某个元素是否某对象构造函数实例。在数组判断上,instanceof关键字也能够进行数组的断定。浏览器

const arr = [1, 2, 3, 4]
arr instanceof Array   // true

  

instanceof支持的浏览器版本比较多,因此通常来讲,用instanceof判断,会比Array.isArray断定的范围要普遍。app

3、toString

对象的toString方式也能够断定数组类型,通常来讲这种方式的断定是各大库的一种Array.isArray的代替实现。ide

例如,polyfill中,就是如此实现:函数

if (!Array.isArray) {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}

const arr = [1, 2, 3, 4]
Object.prototype.toString.call(arr) === '[Object Array]'   // true

  

4、constructor

除了以上的方式以外,咱们还能够经过构造函数来断定:prototype

const arr = [1, 2, 3, 4]
arr.constructor === Array  // true
arr.__proto__.constructor === Array //true

  

弊端

instanceof和constructor的断定也存在一些弊端,他们断定的数组必须定义在同一个页面,不然将会断定为false。对象

若是在iframe中的数组断定,就会出错。blog

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]

// Correctly checking for Array
Array.isArray(arr);  // true
// Considered harmful, because doesn't work through iframes
arr instanceof Array; // false
arr.constructor === Array; // false

  

总结

由上述几个方法断定,能够得出,其实polyfill的断定是最合理的,也最具备兼容性的一种断定。

利用toString断定,胜出。

 

个人博客:http://www.gaoyunjiao.fun/?p=165

相关文章
相关标签/搜索