js中的eval

简介: js中的eval虽然很少用到但是我感觉还是有必要了解一下的

eval是什么
eval() 是全局对象的一个函数属性。
eval 方法就像是一个完整的 ECMAScript 解析器,它只接受一个参数,即要执行的 ECMAScript (或JavaScript) 字符串
eval() 的参数是一个字符串。如果字符串表示的是表达式,eval() 会对表达式进行求值。如果参数表示一个或多个 JavaScript 语句,那么eval() 就会执行这些语句。不需要用 eval() 来执行一个算术表达式:因为 JavaScript 可以自动为算术表达式求值。如果 eval() 的参数不是字符串, eval() 会将参数原封不动地返回。在下面的例子中,String 构造器被指定,而 eval() 返回了 String 对象而不是执行字符串。

永远不要使用 eval!
eval() 是一个危险的函数, 它使用与调用者相同的权限执行代码。如果你用 eval() 运行的字符串代码被恶意方(不怀好意的人)修改,您最终可能会在您的网页/扩展程序的权限下,在用户计算机上运行恶意代码。更重要的是,第三方代码可以看到某一个 eval() 被调用时的作用域,这也有可能导致一些不同方式的攻击。eval() 通常比其他替代方法更慢,因为它必须调用 JS 解释器,而许多其他结构则可被现代 JS 引擎进行优化。
性能差:引擎无法在编译时对作用域查找进行优化
1.JavaScript 引擎会在编译阶段进行数项的性能优化。其中有些优化依赖于能够根据代码的 词法进行静态分析,并预先确定所有变量和函数的定义位置,才能在执行过程中快速找到 标识符。
2.无法在词法分析阶段明确知道 eval(..) 会接收到什么代码,这些代码会 如何对作用域进行修改,也无法知道传递给 with 用来创建新词法作用域的对象的内容到底 是什么。最悲观的情况是如果出现了 eval(..) 或 with,所有的优化可能都是无意义的,因此最简 单的做法就是完全不做任何优化。
欺骗作用域:但在严格模式的程序中,eval(..) 在运行时有其自己的词法作用域,意味着其 中的声明无法修改所在的作用域。

相关文章
|
6月前
|
JSON JavaScript 小程序
js中eval()的使用说明
js中eval()的使用说明
|
6月前
|
移动开发 JavaScript 前端开发
原生JavaScript+CSS实现计算器(简单的介绍一下eval函数)
原生JavaScript+CSS实现计算器(简单的介绍一下eval函数)
63 0
|
11月前
|
JSON JavaScript Go
js中eval
js中eval
49 0
|
自然语言处理 JavaScript 前端开发
JavaScript中eval和with语句如何影响作用域链:探索深度知识
JavaScript中eval和with语句如何影响作用域链:探索深度知识
|
JavaScript
JS eval() 动态执行函数
JS eval() 动态执行函数
80 0
|
JavaScript 前端开发
用Eval实现基本运算——Javascript
用Eval实现基本运算——Javascript
86 0
用Eval实现基本运算——Javascript
|
自然语言处理 JavaScript 前端开发
JavaScript 中 Eval 函数的前世今生,执行代码字符串
JavaScript 中 Eval 函数的前世今生,执行代码字符串
104 0
JavaScript 中 Eval 函数的前世今生,执行代码字符串
|
JavaScript 前端开发 Shell
开发中切忌使用的JavaScript语句 —— with语句 和 eval语句
开发中切忌使用的JavaScript语句 —— with语句 和 eval语句
155 0
|
JavaScript 前端开发
JS查漏补缺——with语句、eval函数
JS查漏补缺系列是我在学习JS高级语法时做的笔记,通过实践费曼学习法进一步加深自己对其的理解,也希望别人能通过我的笔记能学习到相关的知识点。这一次我们来了解with语句、eval函数
94 0
下一篇
无影云桌面