这段代码:
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/
这是为什么?
我知道在JS中,对象是通过引用传递的,例如:
function test(obj) {
obj.name = 'new name';
}
var my_obj = { name: 'foo' };
test(my_obj);
alert(my_obj.name); // new name
Run Code Online (Sandbox Code Playgroud)
但为什么下面没有工作:
function test(obj) {
obj = {};
}
var my_obj = { name: 'foo' };
test(my_obj);
alert(my_obj.name); // foo
Run Code Online (Sandbox Code Playgroud)
我已经将对象设置为{}(空)但它仍然说foo.
任何人都可以解释这背后的逻辑吗?