Добавление объекта, хранящегося в переменной, к другому объекту без указания ключа использует имя переменной в качестве ключа.Это ожидаемое поведение? - PullRequest
0 голосов
/ 10 мая 2019

Я строил структуру параметров объекта, чтобы использовать ее для инициализации плагина. Конкретный плагин или структура не имеют значения, но допустим, что это было что-то простое, как показано ниже:

{
   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 ведет себя так?

1 Ответ

2 голосов
/ 10 мая 2019

Это документированное и ожидаемое поведение; безопасно сделать?

Да, они сокращенные свойства . Если вы поместите только имя переменной, объект примет имя переменной в качестве имени свойства, а затем присвоит ему значение, которое хранится в этой переменной.

// 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 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...