Строго должно это ограничение ключа литерала объектов JavaScript к парсингу?

См. код ниже, когда я "комментирую в" любой из закомментированных строк, она вызывает ошибку (в IE) "':' ожидаемый". Таким образом мое корректное заключение, что эта неспособность обеспечить ссылку на объектное значение, как объект вводят строковый литерал; это - строго проблема интерпретатора/парсинга? Действительно ли это - кандидат на ужасное (или по крайней мере "плохо") "часть" JavaScript, в отличие от "хороших частей Crockford"?

<script>
var keys = {'ONE': 'one'};

//causes error:
//var obj1 = {keys.ONE: 'value1'};
//var obj1 = {keys['ONE']: 'value1'};

//works
var obj1 = {};
obj1[keys.ONE] = 'value1';

//also works
var key_one = keys.ONE;
var obj2 = {key_one: 'value1'};
</script>
10
задан George Jempty 20 May 2010 в 11:26
поделиться

3 ответа

Ограничение синтаксиса буквального объекта состоит в том, что имена должны быть буквальными. Поскольку имена могут быть указаны как идентификатор, а также как строка, вместо этого использовать переменную невозможно.

Будет создан объект со свойством n , а не со свойством , ответ :

var n = 'answer';
var o = { n: 42 };
15
ответ дан 3 December 2019 в 16:51
поделиться

Вы не можете использовать переменные в качестве ключей при определении объекта с помощью {}

Поэтому они интерпретируются как имена строк и могут состоять только из символов, доступных для имен переменных

имя объекта [somethingThatReturnsValue] = 'значение1'; - правильный путь.

ТАКЖЕ

Вы можете сгенерировать строку и проанализировать ее

var s='{"'+keys.ONE+'": "value1"}';
var obj=JSON.parse(s);
//or
s='var obj2='+s;
eval(s);

Оба вышеупомянутых метода являются плохой практикой для создания объектов в JavaScript, и я не рекомендую их.

6
ответ дан 3 December 2019 в 16:51
поделиться

Подумайте об этом: если бы он работал так, как вы хотите, это полностью внесло бы языковую двусмысленность.

var obj = {something:"red"}
var obj = {"something":"red"}

Эти два оператора эквивалентны в JavaScript, потому что для простых ключей используются "автоматические кавычки". Итак, если something означает буквальную строку «что-то», как она может также относиться к переменной «что-то». Не может. Поэтому, если вы хотите использовать переменные, они должны указываться в квадратных скобках вместо записи ключ: значение .

2
ответ дан 3 December 2019 в 16:51
поделиться
Другие вопросы по тегам:

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