我知道eval是邪恶的,但是在这种情况下,请不要指出这一点。我正在创建一些非常自定义的东西,在我的情况下,eval是唯一的解决方案(这就是eval的用途)。
我的问题是return
在评估字符串中不起作用。浏览器抛出Illegal return statement
错误。有人可以向我解释为什么会这样吗?
我希望对此字符串进行评估:
eval(`
console.log('log this');
return;
console.log('DONT log this')
`);
这是一个可玩的堆叠闪电战
https://stackblitz.com/edit/angular-8x8p6m?file=src%2Fapp%2Fapp.component.ts
答案 0 :(得分:1)
这就是为什么如果我们确实需要new Function()
来使用eval()
而不是eval()
的原因。
如果将字符串传递给Function构造函数,它将自动在其上调用eval()
。因此,无需在同一条语句中包装eval和函数,这基本上是在做同一件事两次。
const js_str = `
console.log('log this');
return 'ok';
console.log('DONT log this')
`;
const result = new Function( js_str )();
console.log( result );
如果您可以解释使用eval()
创建的内容,那么甚至还有更好的解决方案。
答案 1 :(得分:1)
您的问题是您不在函数中
eval('(new Function("console.log(1);return;console.log(2)"))()');
记录1,但不记录2。
答案 2 :(得分:1)
尝试在浏览器中输入console.log('log this'); return; console.log('DONT log this');
(基本上就是评估值);它会抱怨,因为您试图在函数外部使用return
。
但是,您可以执行以下操作:
eval(`
(() => {
console.log('log this');
return;
console.log('DONT log this');
})()
`);
答案 3 :(得分:1)
如评论中所述,return语句仅在函数内部有效
尝试一下:
eval('(function (){
console.log("log this");
return 23;
console.log("do not log this");
})()');