js中有一个很有意思的数据结构叫类数组,它的本质是一个object,示例如下:
var obj = { "0":"a", "1":"b", "2":"c", "length":3 };
这个object具有两个典型特征:1.属性名类似数组的索引("0", "1", "2"……) 2.具有length属性
既然是个object,自然就可以拥有方法,比如数组的push和splice方法。很神奇的一点就是,如果给一个类数组手动添加splice方法,它在控制台的显示就像一个真正的数组一样:
有个类数组的面试题:
var obj = { ‘2‘: 3, ‘3‘: 4, ‘length‘: 2, ‘splice‘: Array.prototype.splice, ‘push‘: Array.prototype.push } obj.push(1) obj.push(2) console.log(obj)
这里考察的主要的点其实是push方法的本质,如果我们自己实现一个push,会怎么写呢?大概会是这样:
Array.prototype.push = function(target){ this[this.length] = target; this.length ++; }
再看上面的题,obj.push(1),可以理解为执行了以下代码:
obj[obj.length] = 1;
obj.length ++;
所以结果就是下面这样:
类数组有两个典型应用,一个是arguments,另一个是dom操作中类似getElementsByTagName()这类方法返回的数据(dom操作涉及的方法,如果返回一个集合,都会以类数组的形式返回)。
原文:https://www.cnblogs.com/nguxg/p/12256121.html