将数组项用作对象中的键时出现意外令牌错误

时间:2016-01-11 01:55:22

标签: javascript arrays associative-array

在Chrome中,以下JavaScript代码会引发意外令牌错误:

var somearray = ["foo","bar"];
var someassoc = {somearray[0]:somearray[1]};

抛出的错误:

Uncaught SyntaxError: Unexpected token [

相反,我希望它应该使用somearray[0]的键和该键的somearray[1]项创建一个对象。

那么,为什么会这样呢? Unexpected Token通常意味着括号在某处错位,等等,但这不是这种情况。

2 个答案:

答案 0 :(得分:5)

JS对象文字的键必须是静态键或[]中包含的表达式(需要ES2015支持)。

您的代码存在的问题是somearray[0]密钥无效。

因此,如果您需要ES5方式,则将其重写为

var somearray = ["foo","bar"];
var someassoc = {};
someassoc[somearray[0]] = somearray[1];

,对于ES2015,您使用

var somearray = ["foo","bar"];
var someassoc = { [somearray[0]]: somearray[1]};

标准的相关部分:

简而言之:密钥必须是有效的标识符。

答案 1 :(得分:4)

在JavaScript中,声明对象时,键名应始终为简单字符串,例如:

var object = {'key': 'Hello World'};

但是,如果你想使用动态的键名,比如somearray [0],你需要做的就是将someassoc声明为一个对象:

var someassoc = {};

然后,通过执行以下操作设置键值组合:

someassoc.key = 'Hello World';

OR

someassoc['key'] = 'Hello World';

在您的情况下将是:

someassoc[somearray[0]] = somearray[1];

这就是全部:)