判断一个对象为数组
2024年7月29日小于 1 分钟
判断一个对象为数组
方式一
通过原型链上的 toString 方法
function isArray(obj) {
return Object.prototype.toString.call(obj) === "[object Array]";
}
这种方式是不安全的,有方式绕过这种方式
const obj = {
value: "100",
[Symbol.toStringTag]: "abc",
};
console.log(Object.prototype.toString.call(obj));
方式二
function isArrayByInstanceof(obj) {
//instanceof 判断不安全 伪数组识别不出
return obj instanceof Array;
}
以下会识别出定义的 LikeArray 为数组
function likeArray() {}
likeArray.prototype = Object.create(Array.prototype);
const obj2 = new likeArray();
obj2[0] = "a";
obj2[1] = "b";
log(obj2 instanceof Array);
方式三
function isArrayByClass(obj) {
return obj.constructor === Array;
}
与 instanceOf 一样可以通过修改原型链绕过验证
方法四
function isArrayByArray(obj) {
return Array.isArray(obj);
}
Array.isArray是ES6的一个新特性可以准确识别数组对象