eval() 和 new Function() 是同一件事吗?

2024-03-15

这两个函数在幕后做同样的事情吗? (在单语句函数中)

var evaluate = function(string) {
    return eval('(' + string + ')');
}

var func = function(string) {
    return (new Function( 'return (' + string + ')' )());
}

console.log(evaluate('2 + 1'));
console.log(func('2 + 1'));

不,是他们not相同。

  • eval()将字符串计算为当前执行范围内的 JavaScript 表达式,并且可以访问局部变量。
  • new Function()将存储在字符串中的 JavaScript 代码解析为函数对象,然后可以调用该函数对象。它无法访问局部变量,因为代码在单独的作用域中运行。

考虑这段代码:

function test1() {
    var a = 11;
    eval('(a = 22)');
    alert(a);            // alerts 22
}

If new Function('return (a = 22);')()被使用,局部变量a将保留其价值。尽管如此,一些 JavaScript 程序员(例如 Douglas Crockford)认为 unless 绝对有必要 https://stackoverflow.com/questions/197769/when-is-javascripts-eval-not-evil,并评估/使用Function在不受信任的数据上使用构造函数是不安全且不明智的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

eval() 和 new Function() 是同一件事吗? 的相关文章

随机推荐

  • 如何以 CSV、C、Python、MatLab、NumPy 样式格式打印 cv::Mat

    我有一个 OpenCV 矩阵 我想以问题中提到的任何样式打印它 cv Mat1b image cv imread input name cv IMREAD GRAYSCALE std cout lt lt format in c style
  • Xna 绘制顺序无法正常工作

    我有一个 Texture2D 的二维数组 它在该数组中保存地图的不同部分 不过 我有一个问题 当我运行游戏时 地图绘制正确 但由于某种原因 数组 0 0 纹理重叠了我的所有纹理 包括我的玩家纹理和鼠标纹理 当我的鼠标和玩家纹理正确重叠地图时
  • 如何在 couchdb 中编写通配符搜索查询,其中名称如“a%”

    如何在 couchdb 中编写通配符搜索 我想在 sql 中编写与 LIKE 相同的查询 请帮助我 name arun surname mr name balu surname tp 我需要列出所有以 a 开头的名称 Thanks 在 co
  • 有关对齐的问题

    在函数内的局部作用域中声明时将所有相同类型的变量分组在一起是一个好习惯吗 如果是 为什么 它能解决内存对齐问题吗 我认为这对我 20 年前使用的 VAX C 编译器很重要 但对任何现代编译器都没有影响 这是not可以安全地假设局部变量将按任
  • 在 LISP 中实现基本库函数(手动)

    有什么方法可以定义函数my list my cons my append其执行类似的功能list cons and append分别 否则哪里可以找到这些功能的实现呢 Thanks 对于my list和my append 解决方案是 def
  • 在 Windows 上部署 QML 应用程序的正确方法

    最近 我需要为我的 Qt QML 应用程序创建一个部署包 这个过程非常繁琐 因为您需要手动查找并复制依赖项 正如 官方 中所述Qt Wiki https wiki qt io Deploy an Application on Windows
  • 如何将动态创建的文本字段值发送到 php 邮件

    input type radio click function val this val container html content val this attr count var i 1 for i 0 i lt val i conte
  • 可以在 Oracle 的 SELECT 中执行自动编号序列吗?

    我需要在 Oracle 中完成一项任务 但我不知道如何才能做到这一点 好的 当我动态定义自动编号序列时 我需要执行 SELECT 例如 Select autonumber 1 9000 as auto from some table 结果是
  • ng2-ckeditor 404(未找到)

    我使用 cmd npm install ng2 ckeditor 添加了 ng2 CKEDitor 安装得很好 有一个例子https www npmjs com package ng2 ckeditor https www npmjs co
  • 无法使用 psycopg2 连接到 Postgres 容器

    我有以下设置 容器中的一个简单 Flask 应用程序 Postgres 容器 使用以下 Dockerfile FROM python alpine3 7 COPY app WORKDIR app RUN apk update RUN apk
  • Eclipse 调试配置中的默认 VM 参数?

    当我使用 TDD 实现新功能时 我经常使用快捷方式Shift Alt D T仅运行我当前正在处理的 jUnit 测试用例 而不是整个测试套件 这需要几分钟 这将为当前 Java 源创建一个新的调试配置并立即运行它 现在我想在启用断言的情况下
  • AutoCompleteTextView 未完成括号内的单词

    我已经实施了AutoCompleteTextView如下 MainActivity java public static String myData new String Africa AF America AFM Apple AMP te
  • 将自定义数据嵌入到不会被 ld.so 映射的 ELF 文件中

    我有一个 500MB 的文件 其中包含一些自定义数据 即 ZIP 存档 我想将它嵌入到我的 ELF 可执行文件中 这样当我分发 ELF 文件时 我将只能发送 1 个文件而不是 2 个文件 问题是我不希望在我的应用程序启动时操作系统自动加载这
  • 在 Entity Framework 4.0 中批处理 DB 命令

    我当前的项目需要每天与外部系统同步 同步基于复杂的导入文件结构 该结构通过广泛的业务逻辑进行解析和处理 由于业务逻辑的原因 我们决定在 NET 代码中进行此操作并重用现有的 BL 组件 而不是在存储过程或集成服务中编写相同的逻辑 BL 层位
  • .Net 中的单元测试属性?

    我正在开发一个我想以开源方式发布的库 我已经开始为代码编写测试 我想知道如何测试 Net 对象中的属性 可以说我有以下内容 public class Person region variables private string name S
  • 生成三角/六角坐标 (xyz)

    我试图提出一个迭代函数来生成六角形网格的 xyz 坐标 使用起始六边形位置 为简单起见 假设为 0 0 0 我想计算每个连续的六边形 环 的坐标 如下所示 到目前为止 我所能想到的就是这个 javascript 中的示例 var radiu
  • 具有 AsynchronousServerSocketChannel 的多线程服务器

    我必须实现一个应该接受更多连接的服务器 没有任何更深入的思考 我决定使用新的 JAVA NIO 2 类 我目前的做法是 final Semaphore wait new Semaphore 1 while true wait acquire
  • 为什么函数绑定到它们传递的第一个类型

    我是 F 新手 我在闲逛 发现了一些有趣的东西 我希望有人能启发我了解幕后发生的事情 所以我做了这个功能 let my func x y x y 然后我用参数调用该函数1 and 2给我3 这是我期望发生的事情 但是当我将两个字符串传递给m
  • 与 StructureMap 4.6 瞬态生命周期的混淆

    我使用 StructureMap 4 6 作为我的 IoC 容器 我对其生命周期有点困惑 正如我在其文档中所读到的那样 Transient 将为每个容器创建一个对象实例 支持的生命周期 http structuremap github io
  • eval() 和 new Function() 是同一件事吗?

    这两个函数在幕后做同样的事情吗 在单语句函数中 var evaluate function string return eval string var func function string return new Function ret