js forEach函数操作数组元素之后,原数组未改变

本文深入探讨JavaScript中值传递和共享传递的区别,通过具体实例说明基本类型与对象类型的传递方式,并指出常见陷阱。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说到底,还是js值传递问题。。。。。。。

用户前两天反馈了一个bug,说是这个bug偶尔会出现,很诡异。
然后仔细看了下代码发现问题是:前端通过forEach函数操作数组元素之后,原数组其实并未改变

var valueArr = "aaa ,bbb ,ccc".split(',');
valueArr.forEach(function (el) {
           el = el.trim();//实际上元素的空格并没有去掉,如果用户输入的值中有空格,那就呵呵哒了
           .......
});

其实吧,这种现象很好理解,因为js的基本类型 按值传递,对象类型按 共享传递(call by sharing),但是老是跳进这种坑里。。。。。。。。。。

//基本类型按值传递
var x = 1;
function changeValue(y) {
    y = 2;
}
changeValue(x);
console.log(x); // 1

//对象类型按共享传递
var a = {x : 1};
function changeValue(b) {
    b.x = 2;
}
changeValue(a);
console.log(a.x); // 2
   //---------------------------
var a = {x : 1};
function changeValue(b) {
    b = 100;
}
changeValue(a);
console.log(a.x); // 1, a没有被修改为100.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值