判断数组真伪的方法总汇

前言

在js中数组类型大家应该都不陌生,那你是否知道数组其实是有真假之分的呢?

什么是伪数组。

伪数组:1、拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解
2、不具有数组所具有的方法

常见的伪数组有:

  • 原生js获取dom元素得到的集合,例如:使用document.getElementsByTagName获取的元素标签集合就是伪数组
  • 函数的argument参数

创建伪数组和真数组实例。

  <div></div>
  <div></div>
  <div></div>
  <script>
  var divs = document.getElementsByTagName("div"); //类数组
  var arr = [1, 2]//真数组
  </script>

对象隐式原型的构造函数判断

console.log(divs.__proto__.constructor);
//结果为:ƒ HTMLCollection() { [native code] }
//HTML 元素的集合
console.log(arr.__proto__.constructor);
//结果为:ƒ Array() { [native code] }
//构造函数Array

原理: 真数组都是由Array构造出来的对象,所以它的隐式原型的构造属性为Array

.toString()方法

  console.log(divs.toString());
  //结果为:[object HTMLCollection]
  console.log(arr.toString());
  //结果为:1,2

原理: 真数组调用toString方法会强转为字符串,但是伪数组调用toString方法返回的结果中括号后面的为它的构造函数类型

Object.prototype.toString.call方法

  console.log(Object.prototype.toString.call(divs));
  //结果为:[object HTMLCollection]
  console.log(Object.prototype.toString.call(arr));
  //结果为:[object Array]

原理: 利用call改变Objcet方法的this指向,从而使真伪数组都可使用,返回的结果中括号后面的为它的构造函数类型

instanceof判断

console.log(divs instanceof Array);
//结果为:false
console.log(arr instanceof Array);
//结果为:true

原理: 检测构造函数(Array)prototype 属性是否出现该实例对象原型链上。

Array.isArray()判断

console.log(Array.isArray(divs));
//结果为:false
console.log(Array.isArray(arr));
//结果为:true

原理: 最常见的判断是否是一个数组

数组方法来判断

try {
      console.log(divs.push(1));//报错
    } catch (err) {
        console.log("divs没有push方法");
    } 
    console.log(arr.push(1));//返回了3

原理: 伪数组没有数组具有的方法,则伪数组调用数组方法时抛出错误信息。

isPrototypeOf

	console.log(Array.prototype.isPrototypeOf(divs));
	//结果为:false
    console.log(Array.prototype.isPrototypeOf(arr));
    //结果为:true

原理: 判断对象是否在指定对象的原型链上

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值