在不指定密钥的情况下将存储在变量中的对象添加是使用变量名作为键.这是预期的行为



i正在构建一个对象参数结构,用于插件的初始化。特定的插件或结构无关紧要,但可以说这很简单,如以下内容:

{
   key1:'val1',
   key2: {
      subkey1: 'subval1'
   }
}

我在两个不同的对象变量中构建了整体结构,例如:

var key2 = {subkey1: 'subval1'};
var finalStructure = {
   key1: 'val1',
   key2  <-- oops! instead of key2: key2
};

我直到后来才意识到我忘记了指定"键2:"键,并且惊讶地发现总体结构确实最终出现了key2: {...}

我将key2的变量名称更改为foobar,结果结构使用了可变名称" foobar"作为键的名称。

var foobar = {subkey1: 'subval1'};
var finalStructure = {
   key1: 'val1',
   foobar
};

产生了这种结构:

{
   key1:'val1',
   foobar: {
      subkey1: 'subval1'
   }
}

是这种记录的和预期的行为;安全吗?还是这是一个碰巧导致JavaScript行为的幸运错误?

是这种记录和预期的行为;安全做?

是的,它们是速记属性。如果仅放置变量名,则该对象将将变量名称作为属性名称,然后将其分配为由该变量持有的值。

// Shorthand property names (ES2015)
var a = 'foo', b = 42, c = {};
var o = {a, b, c};
console.log(o); // {a:'foo', b: 42, c: {}}
// The long, and quite redundant, route:
var o = { a: a, b: b, c: c }

最新更新