资讯专栏INFORMATION COLUMN

重论JavaScript伪数组的种种

jay_tian / 3255人阅读

摘要:伪数组的伪数组理解什么是伪数组定义但是有属性以下是常见伪数组对象伪数组转为真数组自定义伪数组类数组从对象构建伪数组的两个条件具有具有中任意一个并调用最终结果就是生成这个属性具有名为的方法类数组当作数组使用的原理相当于的键名上述也可以用来写特

伪数组

javascript的伪数组理解

什么是伪数组?

定义:obj instanceof Array === false 但是有length属性

以下是常见伪数组:

arguments

NodeList、HTMLCollection

jQuery对象

伪数组转为真·数组

Array.prototype.splice.call(obj)

自定义伪数组 类数组
//从对象构建伪数组的两个条件:
//1. 具有length || 具有pushunshiftpopshift中任意一个并调用(最终结果就是生成length这个属性)
//2. 具有名为splice的方法 
var obj={
    length:0,
    splice(){}
};
console.log(obj);

var obj2={
    push:[].push, 
    splice(){}
};
obj2.push();
console.log(obj2);
类数组当作数组使用的原理:length相当于obj的键名
var obj={
    length:0,
    splice(){},
    push:Array.prototype.push
};
obj[0]=10;

obj.push(1,2,3);
console.log(obj);//[1,2,3,splice:f,push:f]

var obj2={
    length:1,
    splice(){},
    push:Array.prototype.push
};
obj2[0]=10;

obj2.push(1,2,3);
console.log(obj2);//[10,1,2,3,splice:f,push:f]

//上述push也可以用apply来写
{   push:function () {
  return [].push.apply(this,arguments);
}}
特别的,两种DOM伪数组的区别 1. getElementsByTagName 得到的是 HTMLCollections类
// 如果有一个ID为"test"的元素,可以直接取得
document.getElementsByTagName("div").test

如上,ID元素会被直接列在HTMLCollections对象里的同名键中

item(),length,namedItem()

2.querySelector 得到的是 NodeList类
document.querySelectorAll("div").forEach((a,b,c)=>{
    console.log("第一个参数:" + a + "值");
    console.log("第二个参数:" + b + "键");
   console.log("第三个参数:" + c + "自身");
});

forEach()

item(),length

典型ES6对象特性,entries,keys,values

共性
for(let i=0;i

实际上,通过控制台观察发现,两者都具备iterator接口,都可以支持for ... of语法

相比来讲,querySelector内置forEach,会更方便

援引Arguments来说事

const {
   callee,//函数本身
   length,//参数长度
   [..."所有传入的参数"]//可以用下标获得所有的按顺序得到的参数
}=arguments;

此外,arguments也具备iterator接口,可以直接用for...of遍历

总结:

伪数组基本上属于一个概念问题,只需要知道的是--伪数组的原型一定不是数组,所以,不会有数组的所有方法,在使用的时候不能想当然的去直接用Array.prototype方法比如push,pop,concat等等

伪数组转为真数组的方法有好多种,列下思路:

1.遍历伪数组存入真数组

2.Array.prototype.splice.call(obj)

3.Array.from()

4.原型继承,arr.__proto__=Array.prototype

5.其他工具库中的方法,如jQuery中的makeArray()toArray()等

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/92017.html

相关文章

  • javascript高级程序设计》笔记_数组 稀疏数组 数组

    摘要:数组是数据的有序列表,与其他语言不同的是,数组的每一项可以保存任何类型的数据。如下的代码创建的就是一个密集数组稀疏数组与密集数组相反,并不强制要求数组元素是紧密相连的,即允许间隙的存在。 数组是数据的有序列表,与其他语言不同的是,ECMAScript 数组的每一项可以保存任何类型的数据。也就是说,可以用数组的第一个位置来保存字符串,用第二位置来保存数值,用第三个位置来保存对象, 以此类...

    pepperwang 评论0 收藏0
  • js中数组操作

    摘要:使用两种方式实现刘备张飞关羽通过循环累加刘备张飞关羽可以把数组中的元素链接成字符串刘备张飞关羽将一个字符串数组的元素的顺序进行反转。 数组API API: Application Programming Interface,应用程序编程接口; js中对象提供的方法就叫做API; instanceof 检测一个对象是否是数组;(用来对付复杂数据类型;) // 简单数据类型 typeo...

    Terry_Tai 评论0 收藏0
  • Javascript-数组

    摘要:什么是伪数组伪数组是一个含有属性的对象例如常见的伪数组对象伪数据如何转成标准数组使用源码解析行取数据开始值转结束值直接取的参数有则使用开始值为负数,重新计算值,从尾部往前推算负数的绝对值超过长度,开始值赋值为开始值超过长度开始值赋值为结束值 什么是伪数组 伪数组是一个含有length属性的json对象 例如: { 0: 1, 1: 2, length: 2 }...

    Jackwoo 评论0 收藏0
  • JavaScript-数组

    摘要:什么是数组数组是值的有序集合。这个位置用数字表示叫索引数组用字符串表示叫关联数组。 什么是数组 数组是值的有序集合。数组中的每个值叫一个元素,每个元素在数组中都有一个唯一的位置。这个位置用数字表示叫索引数组;用字符串表示叫关联数组。数组的元素可以是不同的类型可以动态的向数组差人新元素,或者删除指定元素 一维数组 定义数组 定义数组的方式有三种 /*数组字面量方式定义数组*/ var a...

    XanaHopper 评论0 收藏0
  • ES6 for..of 和 Generator,从数组 jQuery 对象说起

    摘要:引用自可迭代对象和迭代器不以规矩,不成方圆为了使某个对象成为可迭代对象象,它必须实现方法,也就是说,它得有一个是的属性。的遍历,绝对应该用。 pseudo 英 [sju:dəʊ] 美 [su:doʊ]adj.假的,虚伪的n.[口]假冒的人,伪君子 pseudo-array 英 [sju:dəʊəreɪ] 美 [sju:dəʊəreɪ][计] 伪数组 jQuery 对象是伪数组 两个...

    Harriet666 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<