См. код ниже, когда я "комментирую в" любой из закомментированных строк, она вызывает ошибку (в 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>
Ограничение синтаксиса буквального объекта состоит в том, что имена должны быть буквальными. Поскольку имена могут быть указаны как идентификатор, а также как строка, вместо этого использовать переменную невозможно.
Будет создан объект со свойством n
, а не со свойством , ответ
:
var n = 'answer';
var o = { n: 42 };
Вы не можете использовать переменные в качестве ключей при определении объекта с помощью {}
Поэтому они интерпретируются как имена строк и могут состоять только из символов, доступных для имен переменных
имя объекта [somethingThatReturnsValue] = 'значение1';
- правильный путь.
ТАКЖЕ
Вы можете сгенерировать строку и проанализировать ее
var s='{"'+keys.ONE+'": "value1"}';
var obj=JSON.parse(s);
//or
s='var obj2='+s;
eval(s);
Оба вышеупомянутых метода являются плохой практикой для создания объектов в JavaScript, и я не рекомендую их.
Подумайте об этом: если бы он работал так, как вы хотите, это полностью внесло бы языковую двусмысленность.
var obj = {something:"red"}
var obj = {"something":"red"}
Эти два оператора эквивалентны в JavaScript, потому что для простых ключей используются "автоматические кавычки". Итак, если something
означает буквальную строку «что-то», как она может также относиться к переменной «что-то». Не может. Поэтому, если вы хотите использовать переменные, они должны указываться в квадратных скобках вместо записи ключ: значение
.