带有负int键的JavaScript assoc数组

时间:2011-11-18 12:09:47

标签: javascript

我似乎无法定义类似的内容:

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

我的Safari抱怨syntax error near '-'。 Parens也没有帮助,即{(-1): ... - 在这种情况下,Safari并不喜欢开场白。

如果我想让键只是整数而不是字符串,那么构造一个关联数组的正确方法是什么呢?

5 个答案:

答案 0 :(得分:23)

请参阅ECMAScript Language Specification的第11.1.5节:您会看到 PropertyName 可能确实是 NumericLiteral ,但规范的第7.8.3节指出 NumericLiteral 可能不会以减号开头。在您的示例中看起来像负面的“文字”实际上是由一元运算符和 NumericLiterals 组成的表达式。

但是, PropertyName 可能不是表达式:它只能是标识符名称,数字文字或字符串文字,表明您可以写

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

感谢GetFree找到正确的解释!

答案 1 :(得分:18)

将它们用引号括起来。您仍然可以使用数字访问:

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

答案 2 :(得分:3)

报价对我有用:

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

答案 3 :(得分:0)

无法使键为负整数。如果你想做一个否定键,你必须使它们成为这样的字符串:

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

如果需要,您可以使用其他代码中的parseInt和toString来回转换。

答案 4 :(得分:0)

我最近遇到了这种情况,截至2018年,ES6的新功能是您可以轻松做到这一点:

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

您甚至可以在其中传递变量(这应该得到与上面的结果相同的结果):

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

如此处https://stackoverflow.com/a/11508490/9063787所述。