先看一段代码数组
const array = new Array(5).map((item) => {
return item = {
name: 'stone'
}
});
console.log(array);
复制代码
觉得的结果:[{name: 'stone'}, {name: 'stone'}, {name: 'stone'}, {name: 'stone'}, {name: 'stone'}]bash
实际的结果:[undefined × 5]函数
what the fuck??? 黑人问号ui
const array = [undefined, undefined, undefined, undefined, undefined];
const newArr = array.map((item) => {
return item = {
name: 'stone'
}
});
console.log(newArr);
复制代码
what the fuck??? 黑人问号spa
原来如此:developer.mozilla.org/en-US/docs/…code
实际上new Array(x)这个操做不是建立一个x项都是undefined的数组,它建立的是一个只有长度的数组,里面的每项都是没有被赋过值的(能够想象new Array(5)其实是建立了一个[ , , , , , ]的数组。cdn
const array = [ , , , , , ];
const newArr = array.map((item) => {
return item = {
name: 'stone'
}
});
console.log(newArr);
复制代码
输出的结果:[undefined × 5]blog
因此总结一下:map函数的回调函数只会被赋过值的项调用。new Array(1) 和 [undefined]不同。new Array(1)没有为数组中的项赋过值,而[undefined]为数组中的项赋了一个undefined值。ip
const array = new Array(5).fill().map((item) => {
return item = {
name: 'stone'
}
});
console.log(array);
复制代码