JS 什么是类数组

概念引入

function test(){
	 console.log(arguments[0]);
	 console.log(arguments);
	 console.log(typeof arguments);
	 arguments.push(3)
}
test(1,2,4)

arguments(实参列表)看着像是数组,能通过下标输出对应的数据,但数组能调用的方法它都不能调用,且其数据结构也和数组不同,数据类型为object,实际上arguments是类数组
在这里插入图片描述

类数组的组成部分

类数组是可以当作数组来使用对象

  • 索引(数字)属性,利用属性名(相当于数组下标)模拟数组的特性
  • 必须有length属性,可以动态增长,相当于数组的length属性
  • 最好加上push方法,根据length属性值的位置进行属性的扩充
  • 还可以加上数组的其他方法,如splice、pop、shift…(不加则不能调用)
 let obj = {
    '0':'a',
    '1':'b',
    '2':'c',
    'length':'3',
    'push':Array.prototype.push,
    'name':'yin'
   }

该obj对象作为类数组可以和数组一样实现根据下标获取对应元素
在这里插入图片描述
在原有基础上可以增加一个splice方法,会让类数组和数组更加相似,但本质上还是对象

let obj = {
    '0':'a',
    '1':'b',
    '2':'c',
    'length':'3',
    'push':Array.prototype.push,
    'name':'yin',
    'splice':Array.prototype.splice
}

类数组的push()方法

数组的push方法是根据 数组的length属性值 来进行元素的扩充

//重写push方法模拟原push方法
Array.prototype.push = function(){
  for(var i = 0;i<arguments.length;i++){
    this[this.length] = arguments[i];
  }
  return this.length
}

类数组调用自定义的push方法,则会根据其 length属性值 来进行属性的扩充

let obj = {
    '2':'a',
    '3':'b',
    'length':2,//将类数组的length属性值设为2
    'push':Array.prototype.push,
    'splice':Array.prototype.splice
}

可以看到当length属性值为2时,类数组调用push方法,会将新数据从属性名为’2’(相当于数组的下标2)的属性开始赋值
在这里插入图片描述

类数组的优势

具有对象和数组的特性,既可以当作对象来用,也可以当作数组来用(并不是所有的数组方法都能使用,可以自己手动添加)

let obj = {
    '0':'a',
    '1':'b',
    '2':'c',
    '3':'d',
    'length':4,
    name:'yin',
    age:12,
    'push':Array.prototype.push,
    'splice':Array.prototype.splice
}

作为对象遍历属性
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值