判断一个对象是真数组的几种方法

判断一个对象是真数组的几种方法

在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、Object.prototype.toString()方法
用法:Object.prototype.toString.call(arr) === ‘[object Array]’
虽然Array也继承自Object,但js在Array.prototype上重写了toString,而我们通过toString.call(arr)实际上是通过原型链调用了。

	console.log(Object.prototype.toString.call(arr));// '[object Array]'
	console.log(Object.prototype.toString.call(divs));//[object HTMLCollection]

通过Object.prototype.toString()判断原型上是什么,真数组为Array。

3、instanceof判断

	console.log(divs instanceof Array);//false
    console.log(arr instanceof Array);//true

运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
instanceof是判断一个构造函数的prototype属性所指向的对象是否在另一个被检测对象的原型链上。
例如obj instanceof F,它的运行机制为:obj.proto.proto… => F.prototype,沿着对象obj的原型链查找是否存在对象F.prototype,若存在则返回true,若查找到原型链的终点Object.prototype仍未找到,则返回false。

4、Array.isArray()判断
用法:Array.isArray(arr)
ES5中新增了Array.isArray方法,IE8及以下不支持
isArray 函数需要一个参数 arg,如果参数是个对象并且 class 内部属性是 “Array”, 返回布尔值 true;否则它返回 false。

	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

利用数组对象里的方法判断,如果不是数组对象,使用方法会报错

6、判断对象是否在指定对象的原型链上

	console.log(Array.prototype.isPrototypeOf(divs));//false
    console.log(Array.prototype.isPrototypeOf(arr));//true
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值