Приветственный массив JavaScript с отрицательными ключами int
Кажется, я не могу определить что-то вроде:
var a = {-1: 'Apple', -2: 'Orange'}
мой Safari жалуется на syntax error near '-'
. Parens также не помогает, т.е. {(-1): ...
- в этом случае Safari не нравится открывающий палец.
Если я хочу, чтобы ключи были просто ints, а не строками, каков правильный способ построения массива-помощника, если таковые имеются?
Ответы
Ответ 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/....