You need to enable JavaScript to run this app. 能否通过存储变量名的字符串获取对应同名变量的取值
优惠活动
大模型
产品
解决方案
定价
更多

能否通过存储变量名的字符串获取对应同名变量的取值

字符串匹配同名变量取值的实操方案

结合你做宝可梦风格游戏的技能管理场景,按实际项目里的推荐优先级排序:

方案1:统一对象字典存储(全环境兼容,最适合游戏项目)

别零散声明一堆独立的全局变量,把所有技能的关联配置统一存在一个对象里,用技能名当对象的键,通过键名读对应值,没有环境兼容问题,后期管理技能也省心:

// 统一技能数据库,所有技能的伤害、属性、动画、特效配置都存在这里
const SkillLib = {
  // 键名和你存的技能字符串完全一致,值就是对应技能的实际配置
  Tackle: { power: 40, element: 'normal', animation: 'tackle_anim', extraEffect: null },
  ThunderShock: { power: 40, element: 'electric', animation: 'thunder_anim', extraEffect: '30%概率麻痹' }
}

// 存当前技能名的字符串变量
const Move = 'Tackle';

// 直接用方括号语法读对应技能的完整配置
const currentMoveConfig = SkillLib[Move];
  • 好处:不会把变量散得到处都是污染全局作用域,不管是浏览器、Node后端、微信/抖音这类小游戏平台,代码都能正常跑;后期新增技能、调整数值直接在SkillLib里加对应键值对就行,不用改零散的变量声明逻辑。

方案2:非严格浏览器环境的临时读取写法

如果已经写了大量零散的全局var变量,在非严格模式的普通浏览器页面里,var声明的全局变量会自动挂到window全局对象上,可以直接通过window按字符串名取值:

// 之前零散声明的全局变量
var Tackle = { power: 40 };
const Move = 'Tackle';

// 从全局对象按字符串名读对应变量
const currentMoveConfig = window[Move];
  • 踩坑提醒:这种写法局限性特别大,严格模式、ES模块环境、各类小游戏环境、Node.js里,var声明的变量不会挂到全局对象上,直接就会读失败;要是变量名刚好和window自带的内置属性重名,还会出那种查半天都找不到原因的隐蔽bug,不适合长期迭代的游戏项目用。

绝对别碰的踩坑写法

别用eval(Move)这种方式取值:一来现在大部分前端项目、游戏引擎开了CSP安全策略之后,eval会直接被拦截禁用;二来eval有潜在的安全风险,运行性能也差,完全是给自己的项目埋雷,没有任何实际优势。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 12:15:03