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

Unexpected Token Error when using array items as keys in an object

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

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

抛出的错误:

Uncaught SyntaxError: Unexpected token [

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

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

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]};

标准相关部分:

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

在JavaScript中,当声明一个对象时,键名应该总是一个简单的字符串,例如:

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

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

var someassoc = {};

然后,设置一个key-value组合,方法是:

someassoc.key = 'Hello World';

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

你的情况是:

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

就这些了:)