判断真数组和伪数组的方法
数组:Array 对象用于在单个的变量中存储多个值。
伪数组:伪数组也称类数组,无法直接调用数组方法,它的构造函数并不是Array,没有数组的典型的length属性。此外,它还是可以用for循环去遍历的。
常见的伪数组:
arguments(实参),它是一个对象并不是一个数组。
nodelist(dom元素节点),调用document.getElementsByTagName、getElementsByClassName等各类获取元素的方法。
判断方法:
①通过instanceof运算符,用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
<body>
<div></div>
<div></div>
<div></div>
</body>
<script>
var divs = document.getElementsByTagName("div"); //类数组
var arr = ["好","家","伙","!"] //真数组
console.log(divs); // HTMLCollection(3) [div, div, div]
console.log(arr); // (4) ["好", "家", "伙", "!"]
</script>
使用instanceof运算符
console.log(arr instanceof Array); // true
console.log(divs instanceof Array); // false
②使用Object.prototype.toString.call()方法
为了每个对象都能通过 Object.prototype.toString() 来检测,需要以 Function.prototype.call() 或者 Function.prototype.apply() 的形式来调用,传递要检查的对象作为第一个参数,称为 thisArg。
console.log(Object.prototype.toString.call(divs)); //[object HTMLCollection]
console.log(Object.prototype.toString.call(arr)); //[object Array]
③使用Array.isArray()方法
用于确定传递的值是否是一个Array。
console.log(Array.isArray(divs)); // false
console.log(Array.isArray(arr)); // true
④使用Array.prototype.isPrototypeOf()方法
用于测试一个对象是否存在于另一个对象的原型链上。
console.log(Array.prototype.isPrototypeOf(divs)); // false
console.log(Array.prototype.isPrototypeOf(arr)); // true
⑤__proto__.constructor
判断对象隐式原型的构造函数
console.log(divs.__proto__.constructor);//ƒ HTMLCollection() { [native code] }
console.log(arr.__proto__.constructor);//ƒ Array() { [native code] }
总结:这里总结五种方法
①使用instanceof运算符。
②使用Object.prototype.toString.call()方法。
③使用Array.isArray()方法。
④使用Array.prototype.isPrototypeOf()方法。
⑤使用__proto__.constructor,查看对象的隐式原型的构造函数是否是Array。
OVERRRRRRRRRRRRR!