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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:53:16