首页 > 解决方案 > eval() 替换,但它是什么意思?需要解释

问题描述

我想在我的代码中使用 eval() 函数,但发现它可以替换为Function('"use strict";return (' + someStringObject + ')')();.

但是......它是如何工作的?这是什么意思?你能给我解释一下吗?这是 IIFE 函数,但里面发生了什么?如何use strict转换someStringObject为“正常”对象?

标签: javascripteval

解决方案


"use strict;"唯一可以防止代码轻松创建全局变量。通过使用Function而不是eval代码在全局函数内部运行并且无权访问本地范围。如果我们插入一个字符串化对象,代码如下所示:

Function('"use strict";return ({ value: 1 })')();

现在函数构造函数创建了一个(全局)函数,其内容为它的主体:

function() {
 "use strict";
 return ({ value: 1 })
 }()

然后按预期评估对象。与 不同JSON.parse,这也允许字符串内部的函数。通常的安全注意事项适用于此 - 不要信任客户端。


推荐阅读