JS 字符串转换为函数体
//使用示例
drawer.draw({ type: 'circle', param: 'red' }); // 调用_drawCircle
drawer.draw({ type: 'rect', param: 'blue' }); // 调用_drawRect
function test() {
debugger;
console.log("test");
}
function looseJsonParse(obj) {
return Function('"use strict";return (' + obj + ")")();
}
const parsedFunction = looseJsonParse("function test(){console.log('1');}");
console.log(parsedFunction);
// { a: 3, b: [Function: b], c: 2021-06-28T08:00:00.000Z }
// 通过Function构造函数,将字符串转换为函数体,再通过()执行函数体,返回函数体的结果,即可实现将字符串转换为对象的功能。
// 但是,由于使用了Function构造函数,因此需要注意安全性问题,不要将不可信的字符串传入该函数。
// 通过JSON.parse()方法,可以将JSON字符串转换为对象,但是JSON.parse()方法只能解析符合JSON规范的字符串,对于一些不符合JSON规范的字符串,如字符串中包含函数、日期等,JSON.parse()方法会抛出异常。
// 为了解决这个问题,可以使用eval()方法,但是eval()方法会执行字符串中的代码,存在安全隐患。
// 因此,可以使用Function构造函数,将字符串转换为函数体,再通过()执行函数体,返回函数体的结果,即可实现将字符串转换为对象的功能。但是,由于使用了Function构造函数,因此需要注意安全性问题,不要将不可信的字符串传入该函数。

浙公网安备 33010602011771号