0%

JS 运行字符串的代码

问题

有一段字符串 let string = 'let a = 123;console.log(a)',需要运行这段字符串。

我第一个想到的就是是 eval

但是 MDN 提到了:永远不要使用 eval!

使用 eval 的糟糕代码:

1
2
3
4
function looseJsonParse(obj) {
return eval('(' + obj + ')');
}
console.log(looseJsonParse('{a:(4-1), b:function(){}, c:new Date()}'));

不用 eval 的更好的代码:

1
2
3
4
function looseJsonParse(obj) {
return Function('"use strict";return (' + obj + ')')();
}
console.log(looseJsonParse('{a:(4-1), b:function(){}, c:new Date()}'));

解决

1
Function(`let string = 'let a = 123;console.log(a)`)();

后记

真香