不用eval怎么把字符串的箭头函数的转为函数?
问题
原数据
var data = { listeners: {
change: "(val) => { console.log(val); }",
},
};
期望
转换成不带双引号的
var data = { listeners: {
change: (val) => { console.log(val); },
},
};
回答:
(更新)不用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"
以上是 不用eval怎么把字符串的箭头函数的转为函数? 的全部内容, 来源链接: utcz.com/p/935013.html