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

JavaScript技术问询:能否使用生成的名称命名变量?

JavaScript中使用动态生成的名称创建变量的方法

首先得说,你的示例代码里的eval用法其实没达到预期效果——你先执行了x = eval("block_" + coordinates_x + "_" + coordinates_y),这时候如果block_1_1还没定义会直接报错,之后的var x = 0又会把x覆盖成0,根本没创建出block_1_1变量。下面给你讲几种正确的实现方式:

1. 利用全局对象(浏览器环境)

在浏览器里,全局变量本质是window对象的属性,所以你可以通过动态属性名的方式创建变量:

const coordinates_x = 1;
const coordinates_y = 1;
// 动态创建名为block_1_1的全局变量
window[`block_${coordinates_x}_${coordinates_y}`] = 0;

// 之后就能直接访问block_1_1了
console.log(block_1_1); // 输出0

不过这种方式会污染全局作用域,容易和其他脚本的变量冲突,除非必要不建议用。

2. 使用自定义对象(推荐方案)

更好的做法是自己创建一个容器对象,把动态命名的变量作为对象的属性存储,既安全又方便管理:

const coordinates_x = 1;
const coordinates_y = 1;
// 创建一个专门的容器来存放这些动态变量
const blocks = {};
// 动态添加属性
blocks[`block_${coordinates_x}_${coordinates_y}`] = 0;

// 访问的时候可以用两种方式
console.log(blocks.block_1_1); // 输出0
// 或者继续用动态语法
console.log(blocks[`block_${coordinates_x}_${coordinates_y}`]); // 输出0

这种方式不会污染全局作用域,还能统一管理所有类似block_x_y的变量,后期维护也更轻松。

3. 关于eval的注意事项

你示例里用到了eval,虽然理论上可以用它来创建动态变量:

const coordinates_x = 1;
const coordinates_y = 1;
eval(`var block_${coordinates_x}_${coordinates_y} = 0;`);
console.log(block_1_1); // 输出0

但非常不推荐这种方式:eval会执行传入的任意代码,存在安全风险(如果动态内容来自用户输入,很容易被注入恶意代码),而且会影响JavaScript引擎的性能优化,代码可读性也差。

总结一下,优先用自定义对象来存储动态命名的变量,既安全又清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:29:14