JavaScript中eval函数的使用方法与示例

作者:拾光

时间:2026-10-30

浏览:112

本文详细介绍JavaScript中eval函数的定义、语法及返回值。重点解析eval在处理原始字符串时的行为,以及SyntaxError和EvalError的抛出条件。通过代码示例展示如何利用eval动态执行表达式及访问DOM对象,同时指出其在实际开发中的局限性与安全考量。

文章目录

eval函数定义与语法

eval() 函数用于计算传入的字符串,并执行其中包含的 JavaScript 代码。

语法格式为 eval(string)。参数 string 是必需的,代表包含 JavaScript 表达式或语句的字符串。该函数返回通过计算 string 得到的值(若存在)。

该方法仅接受原始字符串作为参数。如果传入的参数不是原始字符串,eval 将不作任何改变地返回原值。因此,不应为 eval() 函数传递 String 对象作为参数。

异常处理机制

若尝试覆盖 eval 属性或将 eval() 方法赋予另一个属性并通过该属性调用,ECMAScript 实现允许抛出一个 EvalError 异常。

当参数中不包含合法的表达式和语句时,eval() 会抛出 SyntaxError 异常。

若以非法方式调用 eval(),则会抛出 EvalError 异常。

如果传递给 eval() 的 JavaScript 代码在执行过程中产生异常,eval() 会将该异常传递给调用者。

尽管 eval() 功能强大,但在实际应用中直接使用的场景并不多见。

基础使用示例

以下是一个常用的基础示例:


<SCRIPT language="javascript">
function showsubmenu(sid)
{
whichEl = eval("submenu" + sid);
if (whichEl.style.display == "none")
{
eval("submenu" + sid + ".style.display=\"\";");
}
else
{
eval("submenu" + sid + ".style.display=\"none\";");
}
}
</SCRIPT>

Eval 函数

功能:先解释 JavaScript 代码,然后在执行它

用法:Eval(codeString)

codeString 是包含 JavaScript 语句的字符串,在 eval 之后使用 JavaScript 引擎编译。

var the_unevaled_answer = "2 + 3"; var the_evaled_answer = eval("2 + 3"); alert("the un-evaled answer is " + the_unevaled_answer + " and the evaled answer is " + the_evaled_answer);

运行上述 eval 程序后,可以看到在 JavaScript 中字符串 "2 + 3" 实际上被执行了。因此,当把 the_evaled_answer 的值设为 eval("2 + 3") 时,JavaScript 会明白并将 2 和 3 的和返回给 the_evaled_answer。

这看起来似乎有些傻,其实可以做出很有趣的事。比如使用 eval 你可以根据用户的输入直接创建函数。这可以使程序根据时间或用户输入的不同而使程序本身发生变化,通过举一反三

三,你可以获得惊人的效果。

动态DOM对象访问

在实际中,eval 很少被用到,但也许你见过有人使用 eval 来获取难以索引的对象。文档对象模型(DOM) 的问题之一是: 有时你要获取你要求的对象简直就是痛苦。例如,这里有一个函数询问用户要变换哪个图象: 变换哪个图象你可以用下面这个函数:


function swapOne() 
{ 
 var the_image = prompt("change parrot or cheese",""); 
 var the_image_object; 
 if (the_image == "parrot") 
 { 
 the_image_object = window.document.parrot; 
 } 
 else 
 { 
 the_image_object = window.document.cheese; 
 } 
 the_image_object.src = "ant.gif"; 
} 

连同这些image标记:

<img src="/stuff3a/parrot.gif" name="parrot" /> <img src="/stuff3a/cheese.gif" name="cheese">

请注意象这样的几行语句: the_image_object = window.document.parrot; 它把一个图象对象敷给了一个变量。虽然看起来有点儿奇怪,它在语法上却毫无问题。但当你有100个而不是两个图象时怎么办?你只好写上一大堆的 if-then-else语句,要是能象这样就好了:


function swapTwo() 
{ 
 var the_image = prompt("change parrot or cheese",""); 
 window.document.the_image.src = "ant.gif"; 
} 

不幸的是, JavaScript将会寻找名字叫 the_image而不是你所希望的"cheese"或者"parrot"的图象,于是你得到了错误信息:”没听说过一个名为the_image的对象”。 还好,eval能够帮你得到你想要的对象。


function simpleSwap() 
{ 
 var the_image = prompt("change parrot or cheese",""); 
 var the_image_name = "window.document." + the_image; 
 var the_image_object = eval(the_image_name); 
 the_image_object.src = "ant.gif"; 
} 

如果用户在提示框里填入"parrot",在第二行里创建了一个字符串即window.document.parrot. 然后包含了eval的第三行意思是: "给我对象window.document.parrot" - 也就是你要的那个图象对象。一旦你获取了这个图象对象,你可以把它的src属性设为ant.gif. 有点害怕?用不着。其实这相当有用,人们也经常使用它。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章