基本原则 类数组为对象,但有一些数组的方法,用起来像数组,因为其本质为对象,也有对象的用法 属性要为索引(数字)属性,必须有length属性,最好加上push方法 举例子 var obj = { 0: 'a', 1: 'a', 2: 'a', 3: 'b', length: 4, push: Array.prototype.push } obj.push('b'); obj.length; //5 obj[4]; // b 这就是一个类数组,你发现可以使用数组的方法,像数组一样访问值,实际上,深入去看你会发现,obj.push调用的是数组的push方法,obj.length访问的是自己的属性,obj[4]访问的也是自己的属性。 智力题 var obj = { 2: 'a', 3: 'b', length: 2, push: Array.prototype.push } obj.push('c','d','e'); 控制台打印obj,你会发现它是长这样子的: 为啥呢,根据之前类数组的push表现,你大概可以猜到,在类数组里面,Array.prototype.push大致表现如下: Array.prototype.push = function() { //传入参数个数 var len = arguments.length; for(var i = 0; i < len; i++){ //属性赋值 this[this.length] = arguments[i]; //将类数组length属性加1 this.length++; } return this.length; } 所以,你执行obj.push('c','d','e')时,首先调用了Array.prototype.push,然后进行对象属性赋值,第一次,直接为属性2赋值,接着为3赋值,之后为4赋值,所以2/3属性值均被覆盖,4由于原来没有,赋值相当于增加了一个属性。 所以,从上面来看,用类数组时时刻要记住,它的本质是一个对象!可以像数组那么访问值及使用,但不能用数组的思维去看它。 另外,在DOM和BOM中,系统生成的数组样的大部分均为类数组。 ————————————————
版权声明:本文为CSDN博主「bingqise5193」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bingqise5193/java/article/details/100170587