和java一样,这是一个传值与传址问题。
a 是一个对象,你把它的地址传入到了arr1、arr2中,通过arr1来改变 a 的值,那么它的所有引用都会一起变化,包括 a 本身与arr2
var arr1 = []; // 建立数组arr11
var arr2 = []; // 建立数组arr2
var a = {id: 0}; // 建立对象 a,初始化id的值0
arr1.push(a); //arr1数组里引用了一个对象a,结构[{id: 0}]
arr2.push(a); //arr2数组里引用了一个对象a,结构[{id: 0}]
arr1[0].id = 2; //arr1[0] 就是第一个,也就是{id: 0},设置成id=2
console.log(a.id, arr2[0].id , arr1[0].id ); //所以结果是2, 2, 2
建议你看看深copy和浅copy