Массив JavaScript с отрицательными ключами int

17

Кажется, я не могу определить что-то вроде:

var a = {-1: 'Apple', -2: 'Orange'}

мой Safari жалуется на syntax error near '-' . Parens не помогает, т. Е.% Co_de% - в этом случае Safari не нравится начальный паз.

Если я хочу, чтобы ключи были просто ints, а не строками, каков правильный способ построения массива-помощника, если таковые имеются?

    
задан mojuba 18.11.2011 в 13:09
источник

4 ответа

19

См. раздел 11.1.5 Спецификация языка ECMAScript : там вы увидите, что PropertyName действительно может быть NumericLiteral , но в разделе 7.8.3 спецификации указано, что NumericLiteral может не начинаться со знака минус , Похоже, что отрицательные «литералы» в вашем примере представляют собой выражения, состоящие из унарного оператора, и NumericLiterals .

Однако PropertyName может не быть выражением: это может быть только имя идентификатора, числовой литерал или строковый литерал, который предполагает, что вы можете написать

{'-1': 'Apple', '-2': 'Orange'}

Благодаря GetFree для поиска правильного объяснения!

    
ответ дан Adam Zalcman 18.11.2011 в 13:19
источник
17

Просто оберните их в кавычки. Вы можете получить доступ к номерам:

var a = {"-1": 'Apple', "-2": 'Orange'}
a[-1]; // Apple;
    
ответ дан Dennis 18.11.2011 в 13:12
источник
3

Цитата работает для меня:

var a = {'-1': 'Apple', '-2': 'Orange'};
console.log(a[-1]);
    
ответ дан aurora 18.11.2011 в 13:13
источник
0

Невозможно сделать ключи отрицательными целыми числами. Если вы хотите сделать отрицательный ключ, вам придется сделать их такими, как это:

var a = {"-1": 'Apple', "-2": 'Orange'}

Затем вы можете делать преобразования взад и вперед с помощью parseInt и toString в вашем другом коде, если это необходимо.

    
ответ дан Ben L 18.11.2011 в 13:14
источник