为了账号安全,请及时绑定邮箱和手机立即绑定

为什么使用JavaScript eval函数是一个坏主意?

为什么使用JavaScript eval函数是一个坏主意?

一只名叫tom的猫 2019-05-23 13:27:05
为什么使用JavaScript eval函数是一个坏主意?eval函数是一种动态生成代码的强大而简单的方法,那么有什么警告呢?
查看完整描述

4 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

  1. eval的不正确使用会打开您的注入攻击代码

  2. 调试可能更具挑战性(没有行号等)

  3. eval'd代码执行速度较慢(无法编译/缓存eval'd代码)


查看完整回答
反对 回复 2019-05-23
?
萧十郎

TA贡献1815条经验 获得超13个赞

评估并不总是邪恶的。有时候它非常合适。

然而,eval目前和历史上大量过度使用,他们不知道自己在做什么。不幸的是,这包括编写JavaScript教程的人,在某些情况下,这确实会带来安全后果 - 或者更常见的是简单的错误。因此,我们越多可以在eval上抛出问号,就越好。每当你使用eval时,你需要理智地检查你正在做什么,因为你可能会做得更好,更安全,更清洁。

举一个非常典型的例子,设置一个id存储在变量'potato'中的元素的颜色:

eval('document.' + potato + '.style.color = "red"');

如果上面那种代码的作者对JavaScript对象的工作原理有了线索,他们就会意识到可以使用方括号而不是文字点名,从而避免了对eval的需求:

document[potato].style.color = 'red';

...这更容易阅读,也不那么潜在的错误。

(但是,有人/他/他/他们知道他们在做什么会说:

document.getElementById(potato).style.color = 'red';

这比直接从文档对象访问DOM元素的狡猾的旧技巧更可靠。)


查看完整回答
反对 回复 2019-05-23
?
MYYA

TA贡献1868条经验 获得超4个赞

我相信这是因为它可以从字符串中执行任何JavaScript函数。使用它可以让人们更容易将恶意代码注入应用程序。


查看完整回答
反对 回复 2019-05-23
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

我想到两点:

  1. 安全性(但只要您自己生成要评估的字符串,这可能不是问题)

  2. 性能:直到要执行的代码未知,它无法进行优化。(关于javascript和性能,肯定是Steve Yegge的演讲


查看完整回答
反对 回复 2019-05-23
  • 4 回答
  • 0 关注
  • 533 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信