Toa*_*gma 0 javascript arrays associative-array
在Chrome中,以下JavaScript代码会引发意外令牌错误:
var somearray = ["foo","bar"];
var someassoc = {somearray[0]:somearray[1]};
Run Code Online (Sandbox Code Playgroud)
抛出的错误:
Uncaught SyntaxError: Unexpected token [
Run Code Online (Sandbox Code Playgroud)
相反,我希望它应该创建一个具有该键的键somearray[0]和一个项的对象somearray[1].
那么,为什么会这样呢?一个Unexpected Token通常意味着一个支架已经被放错地方等,但这里并非如此.
在 JavaScript 中,当声明一个对象时,键名应该总是一个简单的字符串,例如:
var object = {'key': 'Hello World'};
Run Code Online (Sandbox Code Playgroud)
但是,如果您想使用动态的键名,例如 somearray[0],您需要做的就是将 someassoc 声明为一个对象:
var someassoc = {};
Run Code Online (Sandbox Code Playgroud)
然后,通过执行以下操作来设置键值组合:
someassoc.key = 'Hello World';
Run Code Online (Sandbox Code Playgroud)
或者
someassoc['key'] = 'Hello World';
Run Code Online (Sandbox Code Playgroud)
在您的情况下将是:
someassoc[somearray[0]] = somearray[1];
Run Code Online (Sandbox Code Playgroud)
就这样 :)
JS对象文字的键必须是静态键或括在其中的表达式[](需要ES2015支持).
您的代码的问题是somearray[0]密钥无效.
因此,如果您需要ES5方式,则将其重写为
var somearray = ["foo","bar"];
var someassoc = {};
someassoc[somearray[0]] = somearray[1];
Run Code Online (Sandbox Code Playgroud)
而对于您使用的ES2015
var somearray = ["foo","bar"];
var someassoc = { [somearray[0]]: somearray[1]};
Run Code Online (Sandbox Code Playgroud)
标准的相关部分:
简而言之:密钥必须是有效的标识符.