JavaScript数组元素加1:为何一段代码可行而另一段不可行?
为什么两段map代码结果不同?
嘿,这个问题问到点子上了!核心区别就在于自增运算符的工作机制,我来给你掰扯清楚:
第一段代码:符合预期的原因
这段代码:
let newArray = [0,1,2,3].map(elem => elem + 1); console.log(newArray); // 输出 [1,2,3,4]
箭头函数直接返回elem + 1的计算结果——每个元素都被直接加1后返回给map,map会把这些返回值收集起来生成新数组,完全符合你的预期。
第二段代码:没得到预期结果的关键
再看这段:
let newArray = [0,1,2,3].map(elem => elem++); console.log(newArray); // 输出 [0,1,2,3]
这里用了后置自增运算符elem++,它的运行逻辑是:
- 先返回
elem当前的原始值 - 再把
elem的数值加1
也就是说,当map的回调函数执行时,返回的是自增前的旧值,而elem后续的自增操作对map生成新数组没有任何影响——因为map是基于原数组的元素来逐个处理的,回调里的elem是原数组元素的临时副本,它的变化不会传递到下一次迭代,也不会改变原数组。
怎么修改才能得到预期结果?
如果想用自增实现加1的效果,换成**前置自增运算符++elem**就行,它的逻辑是先把elem加1,再返回新值:
let newArray = [0,1,2,3].map(elem => ++elem); console.log(newArray); // 输出 [1,2,3,4]
内容的提问来源于stack exchange,提问作者Tiago Silva
相关产品推荐
相关产品推荐

