如何通过函数参数访问对应对象?现有代码返回undefined求解决
问题解决:通过函数参数访问对应对象
你当前的写法错误在于,[obj${num}]生成的是一个包含字符串(比如"obj1")的数组,而非直接引用变量obj1;直接写obj${num}也只是字符串,无法当作变量名访问对应的对象,所以会返回undefined。
正确解决方案:使用容器对象映射
最安全且易维护的方式是把目标对象放到统一的容器对象中,通过参数作为键访问对应值:
function fnc(num) { const objMap = { 1: { whatever: "foo1" }, 2: { whatever: "foo2" } }; console.log(objMap[num].whatever); } fnc(1); // 输出 foo1
如果要保留原变量名的命名逻辑,也可以这样写:
function fnc(num) { const obj1 = { whatever: "foo1" }; const obj2 = { whatever: "foo2" }; const objMap = { obj1, obj2 }; // ES6简写,等价于 { obj1: obj1, obj2: obj2 } console.log(objMap[`obj${num}`].whatever); } fnc(1); // 输出 foo1
不推荐的方案:使用eval
虽然eval能实现动态变量访问,但它会执行传入的任意代码,存在安全风险(比如参数被注入恶意代码),同时会降低代码可读性与可维护性,因此不建议使用:
function fnc(num) { const obj1 = { whatever: "foo1" }; const obj2 = { whatever: "foo2" }; console.log(eval(`obj${num}`).whatever); } fnc(1); // 输出 foo1
内容的提问来源于stack exchange,提问作者Ewejnog
相关产品推荐
相关产品推荐

