说到底,还是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.