原来new Array(1) 和 [undefined]不同

先看一段代码数组

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

我觉得缘由是:由于咱们数组里面的值是undefined,因此咱们不能给undefined赋值。好的,接下来验证个人猜测。
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);
复制代码
相关文章
相关标签/搜索