js数组map方法,如果原数组中是对象或数组,原数组也改变,为什么?

摩羯178
  • 5
新手上路,请多包涵
var list = [{'a': 1},{'a': 2}];
var newList = list.map(function(index){
    return index.a += 1;
});
console.log(newList,'newList',list,'list');
// list也改变了 list = [{'a': 2},{'a': 3}]
// 本人小白,求大神指教,勿喷,谢谢!
回复
阅读 6.1k
3 个回答

跟map没关系

js对象是引用类型,字符和数字是基本类型

基本类型传值是复制

引用类型传值是引用

举个例子:

var a = 1;
var b = a;
b++;
console.log(a);

var a = [1];
var b = a;
b[0]++;
console.log(a);

你先修改了list的单个key值,再将key值返回,自然就修改了两个!

// slice() concat() 都是浅拷贝,整个数组的指向是不同的了,但是,里面的对象的指向是同一个,所以其实在map里执行的函数,操作的对象还是同一个。。。
list.slice(0)[0] === list[0] // truw
list.slice(0) === list // false

宣传栏