Array(100).map(x => 1) 的结果是什么?
Array(100).map(x => 1) 创建的是空数组,而不是包含 100 个 1 的数组。了解 map 方法如何处理空槽对理解 JavaScript 数组行为至关重要。
Array(100).map(x => 1)
的结果是 一个包含 100 个空槽(empty slots)的数组,而不是包含 100 个 1
的数组。具体表现如下:
🧠 原因解析
-
Array(100)
创建的是空槽数组
Array(100)
只设置了数组的length
为 100,但没有初始化任何索引属性(相当于[empty × 100]
)。 -
map
方法会跳过空槽
map
只对已赋值的元素执行回调函数(空槽被视为undefined
但不会触发回调):const arr = Array(100); // 创建 [empty × 100] arr.hasOwnProperty(0); // false(索引0未初始化)
🔍 验证结果
const result = Array(100).map(x => 1);
console.log(result);
// 输出: [empty × 100](控制台显示)
console.log(result.length); // 100
console.log(0 in result); // false(索引0无值)
✅ 正确创建含 100 个 1
的数组
需先初始化数组元素,常用方法:
// 方法1: fill + map
Array(100).fill(null).map(() => 1);
// 方法2: Array.from(推荐)
Array.from({ length: 100 }, () => 1);
// 方法3: 使用 fill 直接赋值(最简单)
Array(100).fill(1);
⚠️ 特殊注意
若强行访问空槽元素,会得到 undefined
,但 map
仍不会处理:
const emptyArr = Array(100);
console.log(emptyArr); // undefined
console.log(emptyArr.map(x => 1)); // undefined(未被修改)
💎 总结
表达式 | 结果 | 原因 |
---|---|---|
Array(100).map(x=>1) |
[empty × 100] |
map 跳过未初始化的元素 |
Array(100).fill(1) |
[1, 1, 1, ... , 1] |
fill 初始化了所有元素 |