如何在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
相关产品推荐
相关产品推荐

