先看一段代碼數組
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);
複製代碼