Chrome 125中Array(3).map()与[...Array(3)].map()行为差异问询
Array(3).map() 无输出的原因
这不是Chrome浏览器的异常行为,而是JavaScript数组的标准特性:
Array(3)创建的是稀疏数组:它的length属性为3,但数组内部不存在0、1、2这几个索引对应的键,属于未初始化的「空槽」。map()方法的执行规则:只会遍历数组中已被赋值的索引/存在的元素,直接跳过空槽,因此不会执行传入的回调函数,自然不会输出foo。[...Array(3)]会将稀疏数组转为密集数组:扩展运算符会遍历数组的所有索引(包括空槽),把空槽替换为undefined,此时数组的每个索引都有对应值,map()会遍历每个元素并执行回调,从而输出foo。
可以通过代码验证:
const a = Array(3); console.log(Object.keys(a)); // 输出 [],证明无索引键 const b = [...Array(3)]; console.log(Object.keys(b)); // 输出 ["0","1","2"],证明所有索引均已初始化
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

