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

如何在JavaScript中将字符串作为变量名访问已存在的字典对象

错误原因说明

你之前尝试的window[item.id] = idName写法完全搞反了操作方向:你是要从window对象上读取对应ID的已有变量,而不是给这个属性赋值为ID字符串,这会直接覆盖你预先定义的id1/id2等对象,自然不会生效。

可行解决方案

方案1:直接使用全局作用域取值(适配你当前的代码写法)

你预先定义的id1/id2/id3属于全局变量,默认会挂载到window对象下,直接用字符串ID作为key从window取值即可,修正后的函数代码如下:

function myfunc(item){
  const idStr = item.id
  // 从window对象读取对应ID的预定义对象
  const targetObj = window[idStr]
  const name = targetObj.name
  // 后续可正常使用targetObj的所有属性
}

注意:如果你后续把这些变量改成let/const声明,全局作用域下的let/const变量不会挂载到window上,该方案会失效。


方案2:封装专属映射对象(更推荐,无全局污染问题)

建议把所有ID对应的预定义对象统一放到自定义的映射容器中,既不会和全局其他变量冲突,兼容性也更强,修改后的JS代码如下:

// 统一封装所有ID对应的配置
const idConfig = {
  id1: {"name":"xxxx"},
  id2: {"name":"yyyy"},
  id3: {"name":"zzzz"}
}
 
function myfunc(item){
  const idStr = item.id
  // 从自定义映射对象取值,和全局完全隔离
  const targetObj = idConfig[idStr]
  const name = targetObj.name
}

这种写法不受变量声明规范、模块化打包规则影响,可维护性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:15:03