判断一个对象是真数组的几种方法
在js中对对象进行判断时需了解到它是否是一个真数组,例如arguments等类似的虽然以数组的样式(下标值)在存储,但它是一个类数组对象。下面列举几种常见的判断是否为真数组的几种方法
起手式:定义一个类数组和真数组
<div></div>
<div></div>
<div></div>
<script>
var divs = document.getElementsByTagName("div"); //类数组
var arr = [1, 2]//真数组
</script>
1、对象隐式原型的构造函数判断
console.log(divs.__proto__.constructor);//ƒ HTMLCollection() { [native code] }
console.log(arr.__proto__.constructor);//ƒ Array() { [native code] }
真数组都是Array构造出来的对象,所以它的隐式原型的构造属性可以找到Array
2、.toString()方法
console.log(divs.toString());//[object HTMLCollection]
console.log(arr.toString());//1,2
伪数组的.toString返回的结果中括号后面的为它的构造函数类型
3、instanceof判断
console.log(divs instanceof Array);//false
console.log(arr instanceof Array);//true
运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上
4、Array.isArray()判断
console.log(Array.isArray(divs));//false
console.log(Array.isArray(arr));//true
最常见的判断是否是一个数组
5、数组方法来判断
try {
console.log(divs.push(1));//报错
} catch (e) {
console.log(e);
} finally {
console.log("divs没有push方法");
}
console.log(arr.push(1));//返回了3
利用数组对象里的方法判断,如果不是数组对象,使用方法会报错
扫描二维码关注公众号,回复:
13141352 查看本文章

6、判断对象是否在指定对象的原型链上
console.log(Array.prototype.isPrototypeOf(divs));//false
console.log(Array.prototype.isPrototypeOf(arr));//true