【问题标题】:Unexpected Token Error when using array items as keys in an object [duplicate]使用数组项作为对象中的键时出现意外的令牌错误[重复]
【发布时间】:2016-04-15 06:19:52
【问题描述】:

在 Chrome 中,以下 JavaScript 代码会引发 Unexpected Token 错误:

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

抛出的错误:

Uncaught SyntaxError: Unexpected token [

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

那么,为什么会这样呢? Unexpected Token 通常意味着括号被放错了地方等,但这里不是这种情况。

【问题讨论】:

    标签: javascript arrays associative-array


    【解决方案1】:

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

    标准的相关部分:

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

    【讨论】:

      【解决方案2】:

      在 JavaScript 中,声明对象时,键名应始终为简单字符串,例如:

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

      但是,如果您想使用动态的键名,例如 somearray[0],您只需将 someassoc 声明为对象即可:

      var someassoc = {};
      

      然后,通过执行以下操作设置键值组合:

      someassoc.key = 'Hello World';
      

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

      你的情况是:

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

      就是这样:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-23
        • 1970-01-01
        • 2015-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多