如何在JavaScript中使用const和let实现以字符串作为变量名?
核心结论:没法用window['变量名']访问const/let的全局变量
ES6里const和let声明的全局变量不会挂载到window对象上,这是规范刻意设计的,就是为了减少全局作用域的污染问题,所以直接照搬var那套通过window访问的方式行不通。
实用替代方案:用容器模拟动态变量访问
如果需要实现"通过字符串找对应变量"的需求,最靠谱的方式是自己维护一个容器,比如普通对象或者Map:
1. 普通对象(最常用)
// 把需要动态访问的变量统一放到一个对象里 const myVars = { ibrahim: 100, alice: 200 } // 直接用字符串键访问 console.log(myVars['ibrahim']) // 输出:100 // 也可以用变量存字符串再访问 const targetName = 'alice' console.log(myVars[targetName]) // 输出:200
2. Map(键类型更灵活)
如果你的"变量名"不是字符串(比如数字、对象),用Map更合适:
const varsMap = new Map() varsMap.set('ibrahim', 100) varsMap.set(123, '数字键') console.log(varsMap.get('ibrahim')) // 输出:100 console.log(varsMap.get(123)) // 输出:数字键
额外提醒:关于函数内的const/let变量
如果是函数内部声明的const/let变量,同样没有类似window的全局对象可以直接访问,建议用上面的对象/Map封装。别想着用eval,虽然它能实现,但会带来安全风险、性能损耗,还会让代码变得难以维护,完全得不偿失。
内容的提问来源于stack exchange,提问作者mdibuhossain
相关产品推荐
相关产品推荐

