关于js中arr的可变长度

题目描述

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上面也没有关于这个的解释,所以希望大神能帮忙解答一下,你们将拯救一颗受伤的心灵于水生火热之中,非常感谢大家。


慕田峪9158850
浏览 1146回答 1
1回答

至尊宝的传说

直接设定数组length并不会被es5的几个包括(Array.prototype.forEach,Array.prototype.map,Array.prototype.filter,Array.prototype.reduce,。。)数组迭代方法循环。之前我也不理解,但是在MDN看到它们的Polyfill,迭代的同时都通过 in 运算符 判断当前迭代的索引是否在数组中。而直接设定长度没有设值的数组索引直接因为不能通过这个判断被剔除了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript