1 | console.log(Array(5).filter(item => item === undefined).length) |
这道题咋一看感觉很简单,Array(5)
创建了一个 length 为 5 的数组,数组的每一项都是undefined
,所以答案是 5
但是既然是面试题,自然不会这么简单,实际上答案是 0
数组的filter
方法会为数组的每个已赋值元素调用一次回调函数,对于那些未赋值的索引会直接跳过。虽然直接访问Array(5)[0]
返回值也是undefined
,但是在 chrome 控制台直接输入Array(5)
会发现 return 的是[empty × 5]
,5 个空值,而不是 5 个undefined
。
同样的,下面的代码也会导致数组存在空索引:
1 | var arr = [1, 2] |