判断真数组和伪数组的方法

12 篇文章 0 订阅
5 篇文章 0 订阅

判断真数组和伪数组的方法

数组: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!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值