Ключ для javascript-словаря не сохраняется как значение, а как имя переменной
Я пытаюсь создать объект словаря таким образом
var obj = { varName : varValue };
То, что я ожидаю, это если varName='foo'
, obj должен быть {'foo', 'some value' }
, однако я вижу {varName, 'some value'}
значение переменной не используется, а имя переменной в качестве ключа. Как сделать так, чтобы переменное значение использовалось как ключ?
Ответы
Ответ 1
Попробуйте вот так:
var obj = {};
obj[varName] = varValue;
Вы не можете инициализировать объекты с помощью "динамических" ключей. var obj = { varName : varValue };
эквивалентно var obj = { "varName" : varValue };
. Вот как интерпретируется Javascript.
Ответ 2
Начиная с ECMAScript 2015, который получил лучшую поддержку браузера за последний год (ы), вы можете использовать нотацию индекса переменной:
var obj = { [varName] : varValue };
Это синтаксически то же самое, что и
var obj = {};
obj[varName] = varValue;
Вы также можете использовать выражения или Символы как ключ свойства:
var contact = {
company: companyName,
};
var companiesWithContacts = {
[contact.company.toLowerCase()]: true
};
var myList = {
[Symbol.iterator]: createIteratorForList
};
function createIteratorForList() { ... }