javascript - 将存储在变量中的对象添加到另一个对象而不指定键就是使用变量名作为键。这是预期的行为吗?

标签 javascript object

我正在构建一个对象参数结构以用于插件的初始化。具体的插件或结构并不重要,但可以说它很简单,如下所示:

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

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

var key2 = {subkey1: 'subval1'};

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

直到后来我才意识到我忘记指定“key2:”键,并且惊讶地发现整体结构确实以 key2: {...} 结束。

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

var foobar = {subkey1: 'subval1'};

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

产生了这样的结构:

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

这是有记录的和预期的行为吗?安全吗?或者这是一个幸运的错误,恰好导致 javascript 出现这种行为?

最佳答案

Is this documented and expected behavior; safe to do?

是的,他们是shorthand properties 。如果只输入变量名称,则对象会将变量名称作为属性名称,然后为其分配该变量所保存的值。

// 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 }

关于javascript - 将存储在变量中的对象添加到另一个对象而不指定键就是使用变量名作为键。这是预期的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56083194/

相关文章:

javascript - 与号的事件键代码?

javascript - 为什么这个 jquery 下拉菜单不起作用?

java - 让我的 Android Activity 都可以访问的管理器类处理缓存/数据的基本方法?

javascript - JS : Objects into array

php - 无法访问 Google Plus JSON 中的附件数据

javascript - 为什么 node.js 在单线程时速度很快?

javascript - 属性 'shouldComponentUpdate' 不可分配给同一属性

javascript - 延迟显示电子邮件地址是否有助于防范电子邮件抓取工具?

javascript - js使用数组移位删除对象属性

javascript - 如何从对象中获取对象数组(不是值,不是字符串,不仅是键)?