题目描述JS中Array是可变长的,如果没有定义值默认是undefined相关代码var arr = [0,1,2];
arr[10]=10;
arr.filter(function(x){ return x===undefined})期待结果题目中只给arr设置了[0,1,2],然后设置arr[10]=10,此时的arr应该是等于[0,1,2,undefined*7,10],然后对这个数组进行过滤操作,会返回等于undefined的项,即返回的应该是[undefined*7]。但是实际的操作结果都是空函数[],然后在filter内部输出x,即var arr = [0,1,2];
arr[10]=10;
arr.filter(function(x){ console.log(x); return x===undefined})发现也只会输出0,1,2,10。看来MDN上面也没有关于这个的解释,所以希望大神能帮忙解答一下,你们将拯救一颗受伤的心灵于水生火热之中,非常感谢大家。
1 回答
至尊宝的传说
TA贡献1789条经验 获得超10个赞
直接设定数组length
并不会被es5的几个包括(Array.prototype.forEach
,Array.prototype.map
,Array.prototype.filter
,Array.prototype.reduce
,。。)数组迭代方法循环。
之前我也不理解,但是在MDN看到它们的Polyfill
,迭代的同时都通过 in 运算符 判断当前迭代的索引是否在数组中。
而直接设定长度没有设值的数组索引直接因为不能通过这个判断被剔除了。
添加回答
举报
0/150
提交
取消