背??景昨天看一道笔试题的时候,觉得很简单,结果和想象中的不太一样,就直接上笔试题了。constarray=newArray(5).map((item)=>{returnitem={name:'1'}});console.log(array);//输出结果请写“我想象的答案”:[{名称:'1'},{名称:'1'},{名称:'1'},{名称:'1'},{名称:'1'}];“实际答案”:[空×5]为什么会这样?猜想1我首先想到的是newArray(5)生成的数组是[undefined,undefined,undefined,undefined,undefined]。constarray=[undefined,undefined,undefined,undefined,undefined];constnewArr=array.map((item)=>{returnitem={name:'1'}});console.log(newArr);//结果为[{name:'1'},{name:'1'},{name:'1'},{name:'1'},{name:'1'}];《猜1错》猜2newArray(5)生成的数组每一项都没有值,也就是说生成了[,,,,,]这样的数组。constarray=[,,,,,];constnewArr=array.map((item)=>{returnitem={name:'1'}});console.log(newArr);//结果为[empty×5];“猜测2是正确的”为什么map按顺序为数组中的每个元素调用一次提供的回调函数,并根据结果构造一个新数组。callback只对数组的下标赋值(包括undefined)调用,数组缺失元素不调用;即:从未设置的索引;已被删除;orwhichhaveneverbeenassignedavalue.map依次为数组中的每个元素调用一次提供的回调函数,并根据结果构造一个新数组。-----仅对已赋值(含)的数组索引调用----。地图函数的回调函数只会被分配的项目调用。newArray(1)与[undefined]不同。newArray(1)没有给数组中的项目赋值,[undefined]给数组中的项目赋了一个未定义的值。总结newArray(5)产生的数组是一个没有给数组中的项赋值的数组。map只对已经赋值(含)的数组索引进行回调调用。深入思考map方法constarray=newArray(5)可以理解为constarray=[]array.length=5也可以理解为constarray=[,,,,,]但是这里我有一个疑问:我用学习手写map方法去百度一下,你会发现基本上很多人都是手写的:Array.prototype.MyMap=function(fn,context){vararr=Array.prototype.slice.call(this);//因为是ES5所以不需要扩展字符varmappedArr=[];for(vari=0;i
