动态函数返回字符串而非预期对象数组的问题求助
动态函数返回字符串而非预期对象数组的问题求助
嗨,我来帮你梳理下这个问题~
你遇到的核心问题是模板字符串的误用,导致函数返回了字符串而非你预期的数组对象。咱们来拆解下原因:
你定义的表达式'${op.items}'是一个被引号包裹的模板字符串,当它被拼接到return语句后,函数执行时会自动把op.items这个数组转成字符串——因为模板字符串会调用数组的toString()方法,而数组的这个方法会把每个元素转为[object Object]后用逗号分隔,最终返回的就是这个拼接后的字符串,而非原数组对象。
给你两个实用的解决办法:
直接方案:去掉模板字符串的反引号,让表达式直接指向数组本身。修改后的代码如下:
const value = { items: [ { name: 'a' }, { name: 'b' } ] }; // 直接使用数组引用,无需模板字符串包裹 const expression = 'op.items'; const fn = new Function('op', 'return ' + expression + ';'); const result = fn(value); console.log('result', result); // 输出: [{ name: 'a' }, { name: 'b' }] console.log('type', typeof result); // 输出: object复杂场景方案:如果你有更复杂的动态表达式需求(比如需要组合多个值),也别用模板字符串包裹对象/数组,直接写原生JavaScript表达式即可。比如要返回数组的第一个元素,就写
'op.items[0]',而非'${op.items[0]}'。
另外提醒一句:使用new Function时要格外注意安全,别把不可信的用户输入作为表达式传入,否则可能存在代码注入的风险哦~
内容来源于stack exchange
相关产品推荐
相关产品推荐

