1.isArray()是Array类型的一个静态方法,可以用于判断一个值是否为数组

语法

Array.isArray(obj)

参数

obj :需要检测的值。

返回值

如果值是 Array,则为true; 否则为false。

举个例子

var a = [1,2,3];
    console.log(typeof a); 
    console.log(Array.isArray(a));

输出结果如图所示:

lua 判断一个表是数组 判断是否数组_lua 判断一个表是数组


我们可以看到,通过typeof运算符输出数组的类型是Object ,而我们使用Array.isArray()方法可以直接返回布尔值,在条件表达式中,我们使用这个方法是非常适用的。

2.instanceof判断

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
语法

object instanceof constructor

参数

object某个实例对象 
constructor某个构造函数

描述

instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。

举个例子

const a = [];
const b = {};
console.log(a instanceof Array);
console.log(a instanceof Object);
console.log(b instanceof Array);

输出结果如图所示:

lua 判断一个表是数组 判断是否数组_lua 判断一个表是数组_02

解析:我们可以看出,使用nstanceof运算符可以分别数组和对象,由此来判断数组是数组

3.constructor判断

实例化的数组拥有一个constructor属性,这个属性指向生成这个数组的方法。

const a = [];
console.log(a.constructor)

输出结果如图所示:

lua 判断一个表是数组 判断是否数组_运算符_03

由此可见,数组中有一个叫Array的函数实列话,要是被判断的对象是其他类型的数组的话,我们可以看一下以下代码:

const o = {};
console.log(o.constructor);
const r = /^[0-9]$/;
console.log(r.constructor);
const n = null;
console.log(n.constructor);

lua 判断一个表是数组 判断是否数组_数组_04

你可能觉得这是一种比较靠谱的方法,我们可以用一下方式来判断

const a = [];
console.log(a.constructor == Array)

输出结果如图所示

lua 判断一个表是数组 判断是否数组_lua 判断一个表是数组_05

当是使用这种方法要小心,constructor属性是可以改写的,如果你一不小心作死改了constructor属性的话,那么使用这种方法就无法判断出数组的真是身份了

const a = [];
a.contrtuctor = Object;
console.log(a.constructor == Array);
console.log(a.constructor == Object);
console.log(a instanceof Array);

输出结果如图所示

lua 判断一个表是数组 判断是否数组_构造函数_06

可以看出,constructor属性被修改之后,就无法用这个方法判断数组是数组了,除非你能保证不会发生constructor属性被改写的情况,否则用这种方法来判断数组也是不靠谱的。