对于以下内容:
var obj1 = {
a: 1,
b: 2
};
var obj2 = {
b: 4,
c: 3
};
function extend(obj1, obj2) {
for (i in obj2) {
if (!(i in obj1)) {
obj1[i] = obj2[i];
}
}
return obj1;
}
extend(obj1, obj2);
console.log(obj1); // --> {a: 1, b: 2, c: 3}
console.log(obj2); // --> {b: 4, c: 3}
为什么obj2 [i]分配值而不是密钥?它不应该像obj1 [i]那样分配字母吗?
答案 0 :(得分:0)
如果要复制的属性在obj1中尚不存在,则您的代码会将属性从obj2复制到obj1。
for ... in
遍历键,因此示例中的i
将为b
,然后为c
。
当i
具有值b
时,if子句将不会执行,因为属性b
已经在obj1中。当i
具有值c
时,if子句将执行,因此其中的行将如下所示
obj1['c'] = obj2['c']; // Assign value of obj2['c'] to property 'c' in obj1
基本上是
obj['c'] = 3; // Assign value 3 to property 'c' in obj1