考虑这一点点的JavaScript代码:
var a = [1, 2, 3],
b = a;
b[1] = 3;
a; // a === [1, 3, 3] wtf!?
Run Code Online (Sandbox Code Playgroud)
当我更新"b [1]"时为什么"a"会改变?我在Firefox和Chrome中测试过它.例如,这不会发生在简单的数字上.这是预期的行为吗?
var a = 1,
b = a;
b = 3;
a; // a === 1 phew!
Run Code Online (Sandbox Code Playgroud)
因为"a"和"b"引用相同的数组.其中没有两个; 将"a"的值赋给"b"将引用分配给数组,而不是数组的 副本.
分配数字时,您正在处理原始类型.即使在Number实例上也没有更新值的方法.
您可以使用Date实例看到相同的"它们指向同一对象"行为:
var d1 = new Date(), d2 = d1;
d1.setMonth(11); d1.setDate(25);
alert(d2.toString()); // alerts Christmas day
Run Code Online (Sandbox Code Playgroud)
它是相同的数组(因为它是一个对象,它是相同的引用),你需要创建一个副本来单独操作它们.slice()(它创建一个新的数组,复制的第一级元素),如下所示:
var a = [1, 2, 3],
b = a.slice();
b[1] = 3;
a; // a === [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)