带有负int键的JavaScript assoc数组

moj*_*uba 19 javascript

我似乎无法定义类似的东西:

var a = {-1: 'Apple', -2: 'Orange'}
Run Code Online (Sandbox Code Playgroud)

我的Safari抱怨一个syntax error near '-'.Parens也没有帮助,即{(-1): ...- 在这种情况下,Safari不喜欢开放式的paren.

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

Ada*_*man 24

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

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

{'-1': 'Apple', '-2': 'Orange'}
Run Code Online (Sandbox Code Playgroud)

感谢GetFree找到正确的解释!

  • 那不是原因.您引用的部分解释了数字文字无论如何都在内部转换为字符串,因此当用作键时两者之间没有区别.您不能使用负数的实际原因是因为负数是表达式(减号后跟数字文字)并且您不能将表达式用作对象文字中的键. (2认同)

Den*_*nis 19

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

var a = {"-1": 'Apple', "-2": 'Orange'}
a[-1]; // Apple;
Run Code Online (Sandbox Code Playgroud)


aur*_*ora 5

引用对我有用:

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