W3CAPI 在线教程 | 菜鸟教程_LOGO
文档目录
文档目录
我的书签
 

JavaScript

JavaScript 入门教程

JavaScript是一门Web编程语言,用来实现网页的交互功能,它和HTML、CSS共同组成了个Web开发的基础工具集合,也是前端开发者必备的技能;学习JavaScript教程可以了解它在网页开发中的所有特性和相关概念,让我们能够更加快速的去开发Web应用。

W3CAPI
1
2020-06-18 07:05:48

eval

JavaScript:eval() 函数

详细说明

这个eval该函数用于执行JavaScript源代码。

语法说明

eval(expr)
执行一下

代码说明

expr:
expr 是一个表示 JavaScript 表达式、语句或语句序列的字符串。该表达式可包含现有对象的变量和属性。我们不应调用 eval 来求值算术表达式(如 5 * 9 + 5 - 4),因为 JavaScript 会自动计算算术表达式。需注意参数 expr 是可选的。若未提供参数,eval 将返回 "undefined"。

不要使用eval()

eval()存在执行效率低下且易引发安全隐患的问题,因此不建议使用。主要原因如下:

i) 任意代码执行带来安全风险:传递给 eval 的代码将以调用者的权限执行。因此,若传递的代码可能受到恶意篡改,将导致以您网站的权限在用户设备上运行恶意代码。

ii) 破坏词法作用域引发预期外行为:恶意代码能够获取传递给eval的代码被调用时所处的作用域,从而可能引发安全威胁。

iii) 运行时解释导致性能损耗:eval需调用JS解释器,导致执行缓慢。

其他问题:调试难度增加、阻碍JavaScript引擎优化机制、易引发XSS攻击等安全漏洞、作用域污染导致变量冲突等

现代ES6存在多种可替代eval()的方案。

eval()函数示例-1

以下示例演示了如何使用eval()函数。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<title>JavaScript: eval function example-1</title>
</head>
<body>
<h1 style="color: red">JavaScript  eval() function example-1</h1>
<hr />
<script type="text/javascript">
//This is done to make the following JavaScript code compatible to XHTML. <![CDATA[
eval("language = 78; math = 89;  science=90; document.write('Total marks : '+(language + math + science));");
//]]>
</script>
</body>
</html>

执行一下

在浏览器中查看示例

eval()函数示例-2

这是另一个 eval() 函数的使用示例。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<title>JavaScript: eval function example-2</title>
</head>
<body>
<h1 style="color: red">JavaScript  eval() function example-2</h1>
<hr />
<script type="text/javascript">
//This is done to make the following JavaScript code compatible to XHTML. <![CDATA[
var x = "alert ('We are learning JavaScript eval() function.')";
eval (x);
//]]>
</script>
</body>
</html>

执行一下

在浏览器中查看示例

eval 替代方案

应使用成员运算符而非通过eval转换属性名获取属性。

不推荐的代码:

var letters = { a: apple, b: banana };

var lettername = getPropName(); //returns "a" or "b"

eval("var display = letters." + propname );

推荐代码:

var letters = { a: apple, b: banana };

var lettername = getPropName(); //returns "a" or "b"

var display= letters[ propname ]; // letters[ "a" ] is the same as letters.a

使用函数而非执行代码片段

使用JSON.stringify和JSON.parse代替eval方法

您可点击此处查阅详细讨论。

传递数据而非代码

从网页抓取数据时,使用XPATH而非JavaScript代码。

维护跨实现兼容性

不要使用 eval 函数的第二个参数。该参数并非在所有现代浏览器中都受支持。

以受限权限执行代码

若确实需使用eval执行代码,则应降低权限。不过,这(降低权限)可能未在诸多应用中实现。某些用例可能会在XUL(一种Mozilla前端架构)中实现此机制。

上一篇:JavaScript:函数
下一篇:JavaScript isFinite() 函数:检测数值是否为有限值。

相关提问
敬请期待