将数组项用作对象中的键时出现意外的令牌错误
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]};
标准的相关部分:
- 12.2.6对象初始化程序
- 12.2.6.3静态语义:包含
- 11.6.1标识符名称
简而言之:密钥必须是有效的标识符。
在JavaScript中,当声明对象时,键名应该始终是一个简单的字符串,例如:
var object = {'key': 'Hello World'};
然而,如果您想使用动态的密钥名称,如somearray[0],那么您所需要做的就是将someassoc声明为对象:
var someassoc = {};
然后,通过以下操作设置键值组合:
someassoc.key = 'Hello World';
或
someassoc['key'] = 'Hello World';
在您的情况下,将是:
someassoc[somearray[0]] = somearray[1];
仅此而已:)
相关文章:
- GAS 单击事件处理程序导致 UI Web 应用中出现“意外错误”
- doPost”;遇到意外错误”;提交时的Web表单
- Javascript教科书中给出意外错误的示例代码
- 编写简单的代码行时发生意外错误
- 您在此页面上多次添加了谷歌地图API.这可能会导致意外错误(wordpress)
- 安装平均堆栈时出现意外错误
- 尝试运行Webpack时出现意外错误
- 注释上的双斜杠可能会产生意外错误
- Grunt build+nginx:意外错误
- 使用索引元素id时出现意外错误
- 试图设置Node.js (Express)与vhost一起工作,并获得意外错误
- Parse.Object.fetchAll抛出意外错误
- 数组参数解构抛出意外错误
- 为什么JS在重写变量时会抛出意外错误?
- 分配给变量的匿名函数出现意外错误
- 在Javascript中对数组进行排序时出现意外错误
- Babeljs为regex{m,n}量词生成意外错误
- 在angular承诺中,如何区分意外错误和计划拒绝
- log4javascript IE8 意外错误“函数出席”/“预期函数”
- 出现意外错误(type=Bad Request, status=400),缺少参数