JavaScript:标准内置对象函数属性--eval()

☆  全局函数可以直接调用,不需要在调用时指定所属对象,执行结束后会将结果直接返回给调用者。


eval()

eval() 函数会将传入的字符串当做 JavaScript 代码进行执行。


语法

eval(string)


参数

◆ string

一个表示 JavaScript 表达式、语句或一系列语句的字符串。表达式可以包含变量与已存在对象的属性。


返回值

返回字符串中代码的返回值。如果返回值为空,则返回 undefined。


描述

eval() 是全局对象的一个函数属性。

eval() 的参数是一个字符串。如果字符串表示的是表达式,eval() 会对表达式进行求值。如果参数表示一个或多个 JavaScript 语句,那么eval() 就会执行这些语句。注意不要用 eval() 来执行一个算术表达式:因为 JavaScript 可以自动为算术表达式求值。

如果 eval() 的参数不是字符串, eval() 会将参数原封不动地返回。

如果你间接的使用 eval(),比如通过一个引用来调用它,而不是直接的调用 eval。这就意味着,例如,下面的代码的作用声明创建一个全局函数,并且 eval 中的这些代码在执行期间不能在被调用的作用域中访问局部变量。

function test() {

var x = 2, y = 4;

console.log(eval('x + y'));  // 直接调用,使用本地作用域,结果是 6

var geval = eval; // 等价于在全局作用域调用

console.log(geval('x + y')); // 间接调用,使用全局作用域,throws ReferenceError 因为`x`未定义

(0, eval)('x + y'); // 另一个间接调用的例子

}

eval() 是一个危险的函数, 它使用与调用者相同的权限执行代码。如果你用 eval() 运行的字符串代码被恶意方(不怀好意的人)修改,您最终可能会在您的网页/扩展程序的权限下,在用户计算机上运行恶意代码。更重要的是,第三方代码可以看到某一个 eval() 被调用时的作用域,这也有可能导致一些不同方式的攻击。

eval() 通常比其他替代方法更慢,因为它必须调用 JS 解释器,而许多其他结构则可被现代 JS 引擎进行优化。

你可能感兴趣的:(JavaScript:标准内置对象函数属性--eval())