相关疑难解决方法(0)

对象和console.log的奇怪行为

这段代码:

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/

这是为什么?

javascript google-chrome object

91
推荐指数
1
解决办法
4万
查看次数

为对象分配其他内容时,为什么不通过引用传递此对象?

我知道在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.

任何人都可以解释这背后的逻辑吗?

javascript pass-by-reference

52
推荐指数
4
解决办法
2万
查看次数