Вопрос по javascript – Ключ для словаря JavaScript хранится не как значение, а как имя переменной

43

Я пытаюсь создать объект словаря

var obj = { varName : varValue };

Что я ожидаю, так это еслиvarName='foo'Объект должен быть{'foo', 'some value' } Однако то, что я вижу,{varName, 'some value'} значение переменной не используется, а имя переменной в качестве ключа. Как мне сделать так, чтобы переменное значение использовалось в качестве ключа?

Ваш Ответ

2   ответа
93

Попробуй так:

var obj = {};
obj[varName] = varValue;

Вы не можете инициализировать объекты с помощью «динамических» ключей в старом Javascript.var obj = { varName : varValue }; эквивалентноvar obj = { "varName" : varValue };. Так интерпретирует Javascript.

Однако новый ECMAScript поддерживает вычисленные имена свойств, и вы можете сделать:

var obj = { [varName]: varValue };
Потому что обычно, когда вы создаете объекты с фиксированным набором ключей (это то, что{} синтаксис делает) вы знаете, что это за ключи. Альтернатива потребует каждого, кто Делает хочу, чтобы фиксированные ключи помещали вокруг них кавычки, что было бы больше работы для большего количества людей в течение большей части времени. Dan
Это работает! Спасибо. Хотя мне все еще любопытно, почему другой способ не работает. dev.e.loper
Вы также можете увидеть этот вопрос, на который я только что ответил: / Stackoverflow.com вопросы / 10631007 / ... HBP
19

в котором улучшена поддержка браузеров в последние годы, вы можете использовать обозначение переменной индекса:

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() { ... }

Похожие вопросы