在Chrome中,以下JavaScript代码会引发意外令牌错误:
var somearray = ["foo","bar"];
var someassoc = {somearray[0]:somearray[1]};
抛出的错误:
Uncaught SyntaxError: Unexpected token [
相反,我希望它应该使用somearray[0]
的键和该键的somearray[1]
项创建一个对象。
那么,为什么会这样呢? Unexpected Token
通常意味着括号在某处错位,等等,但这不是这种情况。
答案 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];
这就是全部:)