JavaScript中能否用已有const的部分内容作为新const的名称?
动态创建常量的可行方案
首先,你原来写的代码语法上就不合法——const声明变量时,变量名必须是合法标识符,不能用表达式(比如const1.split(', ')[0]这种运行时才能得到结果的内容),所以直接这么写肯定会报错。
这种需求是可以实现的,但不能直接用普通的const声明,得换个思路:用对象的属性来模拟动态命名的常量,通过Object.defineProperty来设置属性不可修改,达到和const类似的效果。
示例代码:
const const1 = 'hello, "cheese"'; // 拆分出变量名和值,同时去掉值的引号 const [varName, rawValue] = const1.split(', '); const varValue = rawValue.replace(/"/g, ''); // 创建一个专门存储动态常量的对象 const dynamicConstants = {}; // 定义不可修改的属性 Object.defineProperty(dynamicConstants, varName, { value: varValue, writable: false, // 禁止修改,模拟const的特性 enumerable: true // 允许遍历(可选) }); // 使用这个动态常量 console.log(dynamicConstants.hello); // 输出: cheese // 尝试修改会触发错误 dynamicConstants.hello = 'new value'; // TypeError: Cannot assign to read only property 'hello' of object '#<Object>'
如果是在浏览器的全局作用域下,也可以用window[varName]来创建全局变量,但不推荐这么做(会污染全局环境),而且要模拟const的不可修改,同样需要用Object.defineProperty来设置writable: false。
内容的提问来源于stack exchange,提问作者kobero the cheeseman
相关产品推荐
相关产品推荐

