为什么JS对象索引既可以指定键也可以指定值?

时间:2017-11-03 14:32:24

标签: javascript object

对于以下内容:

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]那样分配字母吗?

1 个答案:

答案 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