JavaScript如何在for循环中拼接字符串与整数创建动态命名变量?
问题核心
你当前的写法无法实现动态命名变量的需求:循环内的nearby_ports_x是固定名称的变量,每轮循环都会覆盖上一轮的赋值,不会自动生成带x序号后缀的nearby_ports_0、nearby_ports_1系列变量。JavaScript 不支持直接将迭代变量的值拼接为变量标识符直接声明使用。
最优实现:数组存储(强烈推荐)
不要生成零散的独立全局变量,用数组按索引存储结果是最规范的实现方式,后续调用逻辑和你预期的序号规则完全对应,还不会污染全局作用域:
// 提前缓存DOM集合,避免每次循环重复查询DOM提升性能 const portDoms = document.getElementsByClassName("nearby_ports"); const nearbyPorts = []; for (let x = 0; x < portDoms.length; x++) { nearbyPorts[x] = portDoms[x].href; }
后续取值时直接按索引访问即可:nearbyPorts[0]就是你要的nearby_ports_0对应的值,nearbyPorts[1]对应nearby_ports_1,以此类推。
如果想要更简洁的写法,可以直接用Array.from一步完成转换:
const nearbyPorts = Array.from(document.getElementsByClassName("nearby_ports"), item => item.href);
备选实现:动态生成独立命名变量
如果你必须要生成nearby_ports_0这类独立命名的变量,可以在浏览器环境下通过挂载window属性实现,但不推荐该方案,会污染全局命名空间,后续维护、遍历都更麻烦:
const portDoms = document.getElementsByClassName("nearby_ports"); for (let x = 0; x < portDoms.length; x++) { window[`nearby_ports_${x}`] = portDoms[x].href; }
执行完成后就可以直接在全局作用域访问nearby_ports_0、nearby_ports_1这类变量。如果不想污染全局,也可以自定义一个空对象作为存储载体,将动态命名的属性挂载到对象上,比直接挂window更安全。
内容的提问来源于stack exchange,提问作者AlwaysResearching
相关产品推荐
相关产品推荐

