Подтвердить что ты не робот

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

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

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

мой Safari жалуется на syntax error near '-'. Parens также не помогает, т.е. {(-1): ... - в этом случае Safari не нравится открывающий палец.

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

4b9b3361

Ответ 1

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

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

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

Спасибо GetFree за то, что нашли правильное объяснение!

Ответ 2

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

var a = {"-1": 'Apple', "-2": 'Orange'}
a[-1]; // Apple;

Ответ 3

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

var a = {'-1': 'Apple', '-2': 'Orange'};
console.log(a[-1]);

Ответ 4

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

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

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

Ответ 5

Я недавно столкнулся с этим делом, и с ES6 в 2018 году появилось одно новшество: вы можете просто сделать это:

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

вы даже можете передавать туда переменные (это должно дать тот же результат, что и выше):

var i = 0;
var a = {[--i]: 'Apple', [--i]: 'Orange'}

как упомянуто здесь fooobar.com/info/19024/....