2023/11/1大约 1 分钟
js中的forEach可以改变原数组吗?
昨天晚上遇到了神奇的问题forEach循环改不了数组中的变量了 代码如下:
let a=[1,2,3,4,5]
debugger
a.forEach(item=>{
item=6;
})
console.log(a);//输出[1,2,3,4,5]本以为应该输出[6,6,6,6,6],结果输出了[1,2,3,4,5],那到底是为什么呢,为啥我改了item, 数组没变呢?百度了一下得出答案:
- 如果数组中的值是基本类型, 改变不了;
- 如果是引用类型分两种情况:
1、没有修改形参元素的地址值, 只是修改形参元素内部的某些属性,会改变原数组; 2、直接修改整个元素对象时,无法改变原数组;
后来自己想了一下js函数的执行过程,其实感觉和foreach关系不大,和js中函数形参和实参赋值有关系,函数执行时会创建Activation Object, 等于是重新创建了变量来保存传进来的形参,所以如果是简单类型修改的是Activation Object中的变量,而不是原来的变量, 而复杂类型保存的是内存地址,除非替换整个对象,否则是修改的原有变量。