You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何动态变量名写法在IDE中报错但CodeSandbox可正常运行?

问题解决说明

报错原因

你代码中使用的hostFile.[itemGroup]是不符合ECMAScript标准的非法语法,点运算符后不能直接跟随方括号,本地Node.js运行时严格遵循标准规范,因此直接抛出SyntaxError: Unexpected token '['错误。

CodeSandbox可正常运行的原因

CodeSandbox默认会给项目集成非标准语法兼容的转译配置,比如部分Babel插件会自动识别并转换这种混用的属性访问写法,或者你使用的CodeSandbox模板自带的运行时对这类错误语法做了兼容处理,因此不会触发报错。

修复方案

将所有hostFile.[itemGroup]替换为合法的动态属性访问写法hostFile[itemGroup]即可,还可同步优化判断逻辑提升运行效率:

sourceData.forEach(item => {
  item.itemGroups.forEach(itemGroup => {
    // 用hasOwnProperty直接判断属性是否存在,无需遍历所有key
    if (hostFile.hasOwnProperty(itemGroup)) {
      hostFile[itemGroup].add(item.name)
    } else {
      hostFile[itemGroup] = new Set()
      hostFile[itemGroup].add(item.name)
    }
  })
})

补充语法说明

JS中对象属性访问只有两种合法写法:

  • 静态属性访问:对象.属性名,仅适用于属性名是固定的合法标识符场景
  • 动态属性访问:对象[变量/表达式],适用于属性名是动态变量、包含特殊字符的场景
    两种写法不能混用,对象.[属性]属于标准不支持的错误写法,仅在部分非官方转译环境中可被兼容。

内容的提问来源于stack exchange,提问作者Gerges Hana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:42:00