JavaScript中如何在循环里为动态变量分配对应动态值
解决JavaScript动态变量赋值问题
你的代码存在两个核心问题:
- 变量
i未初始化,直接使用会触发ReferenceError,必须先声明并赋值let i = 0; - 访问
tiles1这类变量的方式错误,需要根据它们的作用域选择正确的访问方式:
情况1:tiles1、tiles2是全局变量(浏览器环境)
全局变量默认挂载在window对象上,需通过window访问:
let i = 0; while(i < 16){ window['tile' + i] = window['tiles' + i]; i++; }
情况2:tiles1是自定义对象的属性(类或对象方法内)
确保this指向当前对象,且tiles1等确实是该对象的属性:
// 类内示例 class TileManager { constructor() { // 预先定义tiles1到tiles15 this.tiles1 = 'tile1内容'; this.tiles2 = 'tile2内容'; // ... 其他tiles变量 this.copyTiles(); } copyTiles() { let i = 0; while(i < 16){ this['tile' + i] = this['tiles' + i]; i++; } } }
情况3:tiles1是局部变量(推荐用数组替代动态变量)
如果tiles1是函数内的局部变量,无法通过对象属性访问,建议用数组管理,更易维护:
function copyTiles() { // 将局部的tiles1-tiles15存入数组 const tilesList = [tiles1, tiles2, tiles3, /* ... 直到tiles15 */]; // 用数组存储结果,避免零散变量 const tileList = []; for(let i = 0; i < 16; i++){ tileList[i] = tilesList[i]; // 非要生成tile1这类全局变量的话,可使用window // window['tile' + i] = tilesList[i]; } }
你之前尝试的tiles+i、"tiles"+i只是生成字符串,并非获取变量值;tiles[i]是访问数组tiles的第i项,但你的tiles不是数组,所以无效。
内容的提问来源于stack exchange,提问作者Forest Fire 7
相关产品推荐
相关产品推荐

