1.isArray()是Array类型的一个静态方法,可以用于判断一个值是否为数组
语法
Array.isArray(obj)
参数
obj :需要检测的值。
返回值
如果值是 Array,则为true; 否则为false。
举个例子
var a = [1,2,3];
console.log(typeof a);
console.log(Array.isArray(a));
输出结果如图所示:
我们可以看到,通过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);
输出结果如图所示:
解析:我们可以看出,使用nstanceof运算符可以分别数组和对象,由此来判断数组是数组
3.constructor判断
实例化的数组拥有一个constructor属性,这个属性指向生成这个数组的方法。
const a = [];
console.log(a.constructor)
输出结果如图所示:
由此可见,数组中有一个叫Array的函数实列话,要是被判断的对象是其他类型的数组的话,我们可以看一下以下代码:
const o = {};
console.log(o.constructor);
const r = /^[0-9]$/;
console.log(r.constructor);
const n = null;
console.log(n.constructor);
你可能觉得这是一种比较靠谱的方法,我们可以用一下方式来判断
const a = [];
console.log(a.constructor == Array)
输出结果如图所示
当是使用这种方法要小心,constructor属性是可以改写的,如果你一不小心作死改了constructor属性的话,那么使用这种方法就无法判断出数组的真是身份了
const a = [];
a.contrtuctor = Object;
console.log(a.constructor == Array);
console.log(a.constructor == Object);
console.log(a instanceof Array);
输出结果如图所示
可以看出,constructor属性被修改之后,就无法用这个方法判断数组是数组了,除非你能保证不会发生constructor属性被改写的情况,否则用这种方法来判断数组也是不靠谱的。