Объект буква Javascript: что такое {a, b, c}?
Вопрос, который у меня есть, лучше всего дать этот jsfiddle, код которого ниже:
var a = 1, b = 'x', c = true;
var d = {a: a, b: b, c: c}; // <--- object literal
var e = [a, b, c]; // <--- array
var f = {a, b, c}; // <--- what exactly is this??
// these all give the same output:
alert(d.a + ', ' + d.b + ', ' + d.c );
alert(e[0] + ', ' + e[1] + ', ' + e[2]);
alert(f.a + ', ' + f.b + ', ' + f.c );
Какая структура данных f
? Это просто сокращение для d
?
Ответы
Ответ 1
var f = {a, b, c};
Он поставляется с ES6 (ECMAScript 2015) и означает то же самое, что:
var f = {a: a, b: b, c: c};
Он называется стенографией значения свойства объекта (или просто сокращением свойств, сокращенными свойствами).
Вы также можете комбинировать сокращения с классической инициализацией:
var f = {a: 1, b, c};
Подробнее см. Инициализатор объектов.
Ответ 2
Это инициализатор объектов Сокращение свойств в ES6.
var f = {a, b, c, d:1}; // Will be equal to {a:a, b:b, c:c, d:1}
Это работает, потому что значение свойства имеет то же имя, что и идентификатор свойства. Это новое дополнение к синтаксису Object Initialiser (раздел 11.1.5) в последней Проект ECMAScript 6, версия 13. И, конечно же, как и ограничения, установленные в ECMAScript 3, вы не можете использовать зарезервированное слово в качестве своего имени.
Такая стенография не приведет к резкому изменению вашего кода, а лишь сделает все немного слаще!
function createCar(name, brand, speed) {
return { type: 'Car', name: name, brand: brand, speed: speed };
}
// With the new shorthand form
function createSweetCar(name, brand, speed) {
return { type: 'Car', name, brand, speed }; // Yes it looks sweet.
}
См. таблицу совместимости для поддержки этих обозначений. В не поддерживающих средах эти обозначения приводят к ошибкам синтаксиса.
Эта сокращенная нотация предлагает сопоставление объектов довольно красиво:
В ECMAScript5, что мы раньше делали:
var tmp = getDate();
var op = tmp.op;
var lhs = tmp.lhs;
var rhs = tmp.rhs;
Может быть сделано в ECMAScript6 с помощью одной строки кода:
var { op, lhs, rhs } = getData();
Ответ 3
var f = {a, b, c}; // <--- what exactly is this??
Он определяет объект в JavaScript с использованием новой записи ECMAScript 2015:
По Mozilla Developer Network:
"Объекты могут быть инициализированы с использованием новых Object(), Object.create() или с использованием литераловой нотации (нотации инициализатора). Инициализатор объекта представляет собой список из нуля или более пар имен свойств и связанных значений объекта, заключенный в фигурные скобки ({})."
var a = "foo",
b = 42,
c = {};
// Shorthand property names (ES6)
var o = { a, b, c };
эквивалентно:
var a = "foo",
b = 42,
c = {};
var o = {
a: a,
b: b,
c: c
};