NIKO'S BLOG

一道数组面试题

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]

笔者注

博客内文章若不另外注明,均为原创。转载请注明出处,谢谢。

博客内容主要是对新知识的归纳、总结。记录博客的目的也是为了方便自己日后的巩固复习。欢迎大家提出文章中理解错误的地方,不胜感激。若文章对你有帮助,将是我的荣幸。