JS/TS中如何输出数组元素的变量表达式而非计算后的值?
解决方法
JavaScript/TypeScript 在执行代码时会直接对表达式求值,所以数组中存储的是计算后的结果,无法直接从已求值的数组元素反推出原始表达式。要保留原始表达式,需要在定义时同时存储表达式的字符串形式和求值结果,或者单独维护表达式字符串再按需求值。
方案1:单独维护表达式字符串,按需求值
把每个表达式以字符串形式存储,需要计算结果时通过 eval 或 new Function 求值:
let prefix = 'Week'; // 存储原始表达式字符串 const exprList = ["prefix + '2nd'", "prefix + 'third'"]; // 生成计算后的结果数组 const resultArray = exprList.map(expr => eval(expr)); // 输出原始表达式 exprList.forEach(expr => console.log(expr)); // 输出计算后的值(可选) resultArray.forEach(val => console.log(val));
方案2:用对象同时存储表达式和结果
如果需要同时保留表达式和对应的值,可以用对象数组的形式:
let prefix = 'Week'; const items = [ { expr: "prefix + '2nd'", value: prefix + '2nd' }, { expr: "prefix + 'third'", value: prefix + 'third' } ]; // 输出原始表达式 items.forEach(item => console.log(item.expr)); // 输出计算后的值(可选) items.forEach(item => console.log(item.value));
注意事项
- 使用
eval时要注意安全风险,确保表达式来源可信,避免注入恶意代码。 - 如果是 TypeScript 项目,
eval会被标记为不安全操作,也可以用new Function替代,比如:new Function('prefix',return ${expr})(prefix)。
内容的提问来源于stack exchange,提问作者tv share
相关产品推荐
相关产品推荐

