【发布时间】:2014-06-07 08:47:45
【问题描述】:
在下面的代码中,for循环以i = 1开头。为什么合并对象的name属性设置正确?
function merge(root){
for ( var i = 1; i < arguments.length; i++ ){
for ( var key in arguments[i] ){
console.log(i); // returns 1 then 2 (not 0)
root[key] = arguments[i][key];
}
}
return root;
}
var merged = merge({name: "John"}, {city: "Boston"},{age: 13});
console.log( merged.name ); // "John" ?
console.log( merged.city ); // "Boston" - OK
console.log( merged.age ); // 13 - OK
如果我设置循环以 i = 2 开头,merged.city 返回 undefined(如预期的那样),而 merged.name 仍返回“John”。
function merge(root){
for ( var i = 2; i < arguments.length; i++ ){
for ( var key in arguments[i] ){
console.log(i); // returns 2
root[key] = arguments[i][key];
}
}
return root;
}
var merged = merge({name: "John"}, {city: "Boston"},{age: 13});
console.log( merged.name ); // "John" - ?
console.log( merged.city ); // undefined - OK
console.log( merged.age ); // 13 - OK
这怎么可能?
【问题讨论】:
标签: javascript for-loop arguments