这段代码:
foo = [{id: 1},{id: 2},{id: 3},{id: 4}, {id: 5}, ];
console.log('foo1', foo, foo.length);
foo.splice(2, 1);
console.log('foo2', foo, foo.length);
Run Code Online (Sandbox Code Playgroud)
在Chrome中生成以下输出:
foo1
[Object, Object, Object, Object, Object] 5
0: Object
1: Object
2: Object
3: Object
length: 4
__proto__: Array[0]
5 (index):23
foo2
[Object, Object, Object, Object] 4
0: Object
1: Object
2: Object
3: Object
length: 4
__proto__: Array[0]
Run Code Online (Sandbox Code Playgroud)
小提琴:http://jsfiddle.net/2kpnV/
这是为什么?
我理解这段代码.我们制作A的副本并将其称为C.当A被更改时,C保持不变
var A = 1;
var C = A;
console.log(C); // 1
A++;
console.log(C); // 1
Run Code Online (Sandbox Code Playgroud)
但是当A是阵列时,我们会有不同的情况.C不仅会改变,而且会在我们触及A之前发生变化
var A = [2, 1];
var C = A;
console.log(C); // [1, 2]
A.sort();
console.log(C); // [1, 2]
Run Code Online (Sandbox Code Playgroud)
有人可以解释第二个例子中发生的事情吗?