最终解
// 声明
const isArray =
Array.isArray ||
function (value) {
return toString.call(value) === '[object Array]'
}
// 使用
isArray([])
1. (es2015) Array.isArray
- 字面意思,用于确定传递的值是否是一个 Array
- 当检测Array实例时, Array.isArray 优于 instanceof,因为Array.isArray能检测iframes,也即是跨框架传入的值,例如iframe里声明一个array,把它赋给父组件的变量,这种情况只有 Array.isArray 和
Object.prototype.toString.call(arg)=='[object Array]'
能识别出来。 - 并且因为es2015的方法有兼容问题,建议这种和下一种结合使用,也即是上文给出的最终解:
// 声明
const isArray =
Array.isArray ||
function (value) {
return toString.call(value) === '[object Array]'
}
2. Object.prototype.toString
var array = [1,23,4];
function isArray(arg){
return Object.prototype.toString.call(arg)=='[object Array]';
}
console.log(isArray(ary));
Object.prototype.toString
的原理,可以看 https://www.yuque.com/docs/share/14edf536-37f3-419a-bd4b-6b3e9a775665?# 《Object.prototype.toString方法的原理 - 紫云飞 - 博客园》- 万能药解法
3. instanceof
var ary = [1,23,4];
console.log(ary instanceof Array)//true;
- 在不会跨iframe赋值的情况下,最简单的写法
- 缺点在 「1」中有讲解
4. constructor
var array = [1,23,4];
array.__proto__.constructor === Array
array.constructor === Array
- 缺点同3