0%

一道数组面试题

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
2
3
var arr = [1, 2]
arr[5] = 5
console.log(arr) // [1, 2, empty × 3, 5]