【问题标题】:Parsing error: Unexpected token, expected "," AND SyntaxError: Unexpected token '[' [duplicate]解析错误:意外的令牌,预期的“,”和语法错误:意外的令牌'['[重复]
【发布时间】:2022-01-12 05:13:38
【问题描述】:

app.js

let ids = [1, 2, 3];

let obj = {};

for (let i in ids) {
  obj = { ...obj, ids[i]: "" };   
}

console.log(obj);

执行上述代码时,出现以下错误。

Parsing error: Unexpected token, expected ","

  4 |
  5 | for (let i in ids) {
> 6 |   obj = { ...obj, ids[i]: "" };  
    |                      ^
  7 | }
  8 |
  9 | console.log(obj);eslint

当我将鼠标悬停在 VS 代码中的 obj = { ...obj, ids[i]: "" }; 行上方时,出现此错误。

当我使用节点运行代码时,即在node app.js 上。我的终端出现以下错误:

obj = { ...obj, ids[i]: "" };  
                     ^

SyntaxError: Unexpected token '['
    at wrapSafe (internal/modules/cjs/loader.js:988:16)
    at Module._compile (internal/modules/cjs/loader.js:1036:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
    at Module.load (internal/modules/cjs/loader.js:937:32)
    at Function.Module._load (internal/modules/cjs/loader.js:778:12)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
    at internal/main/run_main_module.js:17:47

我做错了什么?我希望最后obj 的值是{1 : "", 2 : "", 3: ""}

【问题讨论】:

  • 您希望obj 最终看起来像什么?
  • 我希望 obj 最后的值是 {1 : "", 2 : "", 3: ""}。问题中也提到了这一点。
  • 不要在数组上使用for/in。它适用于对象。使用for/of 或用于迭代数组的其他方法之一。
  • 您是否有特殊原因要这样做?从技术上讲,数组已经是您尝试实现的形状的对象(仅具有一些附加属性)。您可以使用 const newArr = [...ids]; 克隆您的阵列,这对您来说可能是一个更好的选择。如果你真的需要一个对象,一个快速的选择是使用const obj = Object.assign({}, ids);

标签: javascript spread-syntax


【解决方案1】:

有几种解决方案。

  1. 用括号括起来:
for (let i in ids) {
  obj = { ...obj, [ids[i]]: "" }; // Brackets make it act as a key name instead of something else
}
  1. 简单易行的方法:
for (let i in ids) {
  obj[ids[i]] = ""; // This adds a value
}

【讨论】:

    【解决方案2】:

    使用[ids[i]] 代替ids[i]

    let ids = [1, 2, 3];
    
    let obj = {};
    
    for (let i in ids) {
      obj = { ...obj, [ids[i]]: "" };
    }
    
    console.log(obj);

    【讨论】:

      【解决方案3】:

      is[i]key 应该是解析运行时,所以你应该让它 computed property names

      从 ECMAScript 2015 开始,对象初始值设定项语法也 支持计算属性名称。这允许您放置一个表达式 在括号 [] 中,它将被计算并用作属性名称。 这让人想起属性访问器的括号表示法 语法,您可能已经使用它来读取和设置属性。 -MDN

      let ids = [1, 2, 3];
      
      let obj = {};
      for (let i in ids) {
        obj = { ...obj, [ids[i]]: "" };
      }
      
      console.log(obj);

      【讨论】:

        【解决方案4】:

        如果您想动态地将"" 设置为每个id 作为对象中的键,我建议您这样做:

        let obj = {} let ids = [1,2,3]

        ids.forEach((id) => {
           obj[id] = '';
        });
        

        对象将是{ '1': '', '2': '', '3': ''}

        【讨论】:

          猜你喜欢
          • 2021-10-17
          • 2021-03-28
          • 1970-01-01
          • 2022-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-17
          • 2020-11-15
          相关资源
          最近更新 更多