不用eval怎么把字符串的箭头函数的转为函数?-灵析社区

CTang

## 问题 不用eval怎么把字符串的箭头函数的转为函数d 原数据 var data = { listeners: { change: "(val) => { console.log(val); }", }, }; ## 期望 转换成不带双引号的 var data = { listeners: { change: (val) => { console.log(val); }, }, };

阅读量:13

点赞量:0

问AI
(更新)不用eval方法,可以使用'new function'方法, var data = { listeners: { change: "(val) => { console.log(val); }", other: "function(val) { console.log('ES5 function:', val); }" }, }; function stringToFunction(fnStr) { if (/^function\s*\(/.test(fnStr)) { // ES5 function expression return new Function('return ' + fnStr)(); } else { // Assume arrow function let params = fnStr.substring(fnStr.indexOf("(") + 1, fnStr.indexOf(")")).split(","); let body = fnStr.substring(fnStr.indexOf("{") + 1, fnStr.lastIndexOf("}")); return new Function(...params, body); } } // 调用函数方法 data.listeners.change = stringToFunction(data.listeners.change); data.listeners.other = stringToFunction(data.listeners.other); // 测试 data.listeners.change('Hello World'); // 输出 "Hello World" data.listeners.other('Hello World'); // 输出 "ES5 function: Hello World"