我似乎无法定义类似的内容:
var a = {-1: 'Apple', -2: 'Orange'}
我的Safari抱怨syntax error near '-'
。 Parens也没有帮助,即{(-1): ...
- 在这种情况下,Safari并不喜欢开场白。
如果我想让键只是整数而不是字符串,那么构造一个关联数组的正确方法是什么呢?
答案 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'}