JavaScript中如何将变量名转换为字符串?含动态数组场景需求
如何在JavaScript中将变量名转换为对应的字符串?
现有代码:
var a = "aa", b= "bb", c = "cc", d="dd", e="ee"; array = [a,b,c,d,e] // 输出 ["aa", "bb", "cc", "dd", "ee"]请问在JavaScript中能否将变量a、b、c、d、e转换为对应的字符串"a"、"b"、"c"、"d"、"e"?此外数组元素可能是动态的或长度更长,恳请解答!
当然可以实现,但得看具体的代码结构,我给你两种可行的方案,其中第一种是我非常推荐的稳定方案:
方案一:将变量存入对象(最优解)
JavaScript里直接从单独的变量本身提取它的名字是做不到的,但如果把这些变量放进一个对象里,对象的键就是变量名,我们可以轻松通过Object.keys()获取所有键名,完美支持动态数量的变量,维护起来也方便。
示例代码:
// 把所有变量放进一个对象里,键就是你要的变量名字符串 const varsObj = { a: "aa", b: "bb", c: "cc", d: "dd", e: "ee" }; // 获取所有变量名组成的数组 const varNames = Object.keys(varsObj); // 输出 ["a", "b", "c", "d", "e"] // 如果还需要原来的值数组,用Object.values()就能拿到 const valuesArray = Object.values(varsObj); // 输出 ["aa", "bb", "cc", "dd", "ee"]
不管你后续要加多少个变量,只要往对象里加属性就行,Object.keys()会自动帮你收集所有键名,完全不用修改其他代码,非常适合动态场景。
方案二:Hack式提取(不推荐生产环境用)
如果因为某些原因必须保留单独的变量声明,也有一个取巧的方法,但这个方法非常依赖代码的字面量形式,一旦代码被压缩或者变量形式变化就会失效,所以只适合临时测试用。
示例代码:
var a = "aa", b= "bb", c = "cc", d="dd", e="ee"; function extractVarNames(...args) { // 通过把函数参数转换成字符串,再用正则匹配提取变量名 const funcStr = extractVarNames.toString(); return funcStr.match(/\((.*?)\)/)[1].split(', '); } // 调用时必须把变量一个个传进去 const varNames = extractVarNames(a, b, c, d, e); // 输出 ["a", "b", "c", "d", "e"]
为什么不推荐?比如当你用打包工具压缩代码时,变量名a、b会被改成x、y这类短标识符,这时候提取出来的就不是你原来的变量名了;而且如果变量是表达式(比如extractVarNames(a + b, c)),正则也会匹配出错。
总结
如果可以重构代码,方案一绝对是首选,稳定、易维护还支持动态扩展;方案二只能作为临时的权宜之计,别在生产代码里用。
内容的提问来源于stack exchange,提问作者user1234
相关产品推荐
相关产品推荐

