2015-11-21 3 views
2

В JavaScript мы можем динамически создавать или динамически создавать свойства объекта, используя []. Документировано ли это, что он также может использовать его при определении/создании объекта?Обозначение квадратных скобок внутри объекта

Насколько я тестировал (Chrome, FF, Safari), последние версии работают хорошо. Является ли это документированным, поддерживали ли старые браузеры это?

var key = "foo"; 
var value = 'bar'; 
var object = { 
    a: 1, 
    b: 2, 
    [key]: value, 
    c: 3 
}; 

document.body.innerHTML = JSON.stringify(object); // {"a":1,"b":2,"foo":"bar","c":3} 

http://jsfiddle.net/o2x6chzd/

+0

См. Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Browser_compatibility или http://kangax.github.io/compat-table/es6/#test -object_literal_extensions_computed_properties для поддержки браузера. –

ответ

3

Да. Он называется вычисленным именем свойства и является новым в ES2015.

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

Раньше вам приходилось добавлять свойства с помощью вычисляемых по времени имен после создания объекта.

Выражение может быть использовано для вычисления имени:

function foo() { return 1; } 
var o = { 
    [foo() + 1]: 'should be 2' 
}; 
console.log(o); // Object {2: "should be 2"} 
3

Начиная с ECMAScript 6, синтаксис инициализации объекта также поддерживает вычисляемые имена свойств. Это позволяет помещать выражение в скобки [], которое будет вычислено как имя свойства.

Проверьте documentation.

+0

Это больше не называется ECMAScript 6. –

+0

2015 год - дата утверждения, издание - 6, так что с технической точки зрения они одинаковы. – KAD

+0

Это действительно издание 6 ECMAScript, но название языка - «ECMAScript 2015». –