类数组

类数组:跟数组相似,无法使用数组的方法

类数组必须有length属性  需要数组的方法可以自行添加

1、如arguments实参列表是一个数组形式的数据。但无法使用数组的方法。如push。会报错

2、一个对象,里面的键写作索引。加上length属性,与Array的原型方法,既可当数组使用。但本身是对象

// 类数组

function test() {
	console.log(arguments);
	// 这里的arguments[1,2,3,4,5]。是数组的格式。还有length
	// 但无法使用数组的方法
	// arguments.push(1);//报错,无push方法
}
test(1,2,3,4,5);

// 比如一个键为索引的对象,并且包含length属性,以及加上Array的方法。
// 就可以当数组一样使用

var obj = {
	'0' : "a",
	'1' : 'b',
	'2' : 'c',
	length : 3,
	"push" : Array.prototype.push,
	"splice" : Array.prototype.splice//加这个可以改成[]这样的格式
}



obj.push(8);
// obj内部会变成{0: "a", 1: "b", 2: "c", 3: 8, length : 4, push:fun}
// 当在obj内部加一个splice方法,obj的样子会变成[]组的格式。
// 但仍旧是对象。可以当数组用

// 逻辑解析:
// obj内的push方法逻辑分析:
Array.prototype.push = function(target){
	this[this.length] = target;//添加在最后一位。
	this.length++;//并且length++。

	// 虽然这里的this[this.length]就是this.[index] 这个索引对应的是obj中键的值
	// 不管键的索引,比如第一个键为2,那么这个索引就是2,不是0。
}

衍生面试题

// 衍生面试题
var obj1 = {
	'2' : 'a',
	'3' : 'b',
	length : 2,
	"splice" : Array.prototype.splice,//加这个可以改成[]这样的格式
	"push" : Array.prototype.push,
}

obj1.push('c');
// 问:最后obj1里的数据是怎样的


// 答案:
obj1 = {'2':'c','3':'b',length:3,push:fun};//前面的0,1位为empty

// 解析:
// 当obj1.push('c');时,push内部的逻辑,将c赋值给obj1[obj1.length];
// 这里的length为2,所以会赋值给obj[2],所以{'2':'c','3':'b',length:3}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值