2016-01-11 97 views
-1

在Chrome中,下面的JavaScript代码抛出异常标记错误:意外的标记错误

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

错误抛出:

Uncaught SyntaxError: Unexpected token [ 

当代替我会期望它应该用somearray[0]的密钥和somearray[1]的密钥作为该密钥的对象。

那么,为什么会发生这种情况呢?一个Unexpected Token通常意味着支架被放错了地方等,但这不是这种情况。

回答

2

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

这是所有:)

+0

“一个简单的字符串” ---没有什么可以像这样那样的模糊。 '_' <---这是一个“简单的字符串”? – zerkms

3

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

标准的相关部分:

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