javascript - eval() 替换,但它是什么意思?需要解释
问题描述
我想在我的代码中使用 eval() 函数,但发现它可以替换为Function('"use strict";return (' + someStringObject + ')')();
.
但是......它是如何工作的?这是什么意思?你能给我解释一下吗?这是 IIFE 函数,但里面发生了什么?如何use strict
转换someStringObject
为“正常”对象?
解决方案
"use strict;"
唯一可以防止代码轻松创建全局变量。通过使用Function
而不是eval
代码在全局函数内部运行并且无权访问本地范围。如果我们插入一个字符串化对象,代码如下所示:
Function('"use strict";return ({ value: 1 })')();
现在函数构造函数创建了一个(全局)函数,其内容为它的主体:
function() {
"use strict";
return ({ value: 1 })
}()
然后按预期评估对象。与 不同JSON.parse
,这也允许字符串内部的函数。通常的安全注意事项适用于此 - 不要信任客户端。
推荐阅读
- angular - 在 Angular 7 中,即使只订阅一次,为什么 HttpClient.post 也会执行两次?
- salesforce-marketing-cloud - 特定输入的字段验证
- java - 如何在jpa中获取加入键的列表
- sql - 如何在sql中指示日期为空
- python - 创建 AWS KMS 密钥时出现 MalformedPolicyDocumentException
- dictionary - Hash 可以按键或值排序吗?
- javascript - 在构建和运行之后,是否可以在浏览器中查看以角度声明的秘密变量?
- ansible - 在命令行中获取 Ansible 播放/任务/配置级别关键字/指令帮助/参考。可能吗?
- javascript - 在悬停时使用样式 1 更改所有具有相同 id 的所有内容,同时使用样式 2 更改悬停的 div
- bash - 启动数据库时如何从 cloudformation 模板为 RDS 创建模式?