这道JS笔试题你做对了吗?
昨天在看一道笔试题的时候本以为很简单,但是功效不是我想象的那样,直接上笔试题。
const array = new Array(5).map((item) => { return item = { name: ‘1‘ } }); console.log(array); // 请写出输出功效我想象的答案:[{name: ‘1‘}, {name: ‘1‘}, {name: ‘1‘}, {name: ‘1‘}, {name: ‘1‘}];
实际的答案:[empty × 5]
为什么会这样了?
料想1我第一个想到的是new Array(5)生成的数组是[undefined, undefined, undefined, undefined, undefined]。
const array = [undefined, undefined, undefined, undefined, undefined]; const newArr = array.map((item) => { return item = { name: ‘1‘ } }); console.log(newArr); // 功效是[{name: ‘1‘}, {name: ‘1‘}, {name: ‘1‘}, {name: ‘1‘}, {name: ‘1‘}];料想1错误
料想2new Array(5)生成的数组在每一项都没有值,意思就是生成了[,,,,,]一个这样的数组。
const array = [,,,,,]; const newArr = array.map((item) => { return item = { name: ‘1‘ } }); console.log(newArr); // 功效是[empty × 5];料想2正确(这里大喊本身牛逼)
为什么map依次为数组中的每个元素挪用一次供给的callback函数,,然后按照功效结构一个新的数组。-----仅对已分配值(包孕)的数组索引进行挪用----。 map函数的回调函数只会被赋过值的项挪用。new Array(1) 和 [undefined]不一样。new Array(1)没有为数组中的项赋过值,而[undefined]为数组中的项赋了一个undefined值。
总结new Array(5)孕育产生的数组是一个没有为数组中的项赋过值的数组。
map仅对已分配值(包孕)的数组索引进行callback挪用。
优化措置惩罚惩罚 // 措置惩罚惩罚1 const array = new Array(5).fill().map((item) => { return item = { name: ‘1‘ } }); console.log(array); // [{name: ‘1‘}, {name: ‘1‘}, {name: ‘1‘}, {name: ‘1‘}, {name: ‘1‘}]; // 措置惩罚惩罚2 var array = Array.apply(0,{length:5}).map((item) => { return item = { name: ‘1‘ } }); console.log(array); // [{name: ‘1‘}, {name: ‘1‘}, {name: ‘1‘}, {name: ‘1‘}, {name: ‘1‘}];这道JS笔试题你做对了吗?
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32284.html