您当前的位置:首页 > 互联网教程

JavaScript 的 eval() 函数详解

发布时间:2025-05-23 11:44:59    发布人:远客网络

一、JavaScript 的 eval() 函数详解

1、JavaScript的 eval()函数用于执行传入的字符串作为 JavaScript代码。它接收一个字符串参数,若此字符串为表达式,则返回表达式的结果;否则返回 undefined。

2、了解 eval()的基本用法对于开发者来说至关重要。首先,让我们通过 CodePen探索 eval()的基本调用方式:

3、CodePen:JavaScript eval()函数的基本用法

4、在非严格模式下,可以直接调用 eval()函数,这在某些场景下非常有用,但请确保代码安全。非严格模式下间接引用 eval()函数同样适用,具体实例可参考:

5、CodePen:JavaScript非严格模式下间接引用 eval()函数

6、严格模式下,直接调用 eval()函数可能会引发一些问题,而间接引用它则在某些情况下可以提供一种解决方案。我们通过 CodePen分别演示了严格模式下调用和引用 eval()函数的场景:

7、CodePen:JavaScript严格模式下直接调用 eval()函数

8、CodePen:JavaScript严格模式下间接引用 eval()函数

9、此外,eval()可以与 window对象结合使用,提供另一种调用方法,详情请参阅:

10、CodePen:JavaScript使用 window.eval()函数

11、然而,eval()的不当使用可能会引发安全问题,特别是可能受到 XSS攻击。开发者需谨慎使用此功能,确保代码安全。

12、为了更全面地了解 eval()函数,开发者应查阅相关资料和参考文档,从而深入掌握其用法和潜在风险。

二、javascript中eval的用法

eval()函数可计算某个字符串,并执行其中的的 JavaScript代码。

通过计算 string得到的值(如果有的话)。

该方法只接受原始字符串作为参数,如果 string参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval()函数传递 String对象来作为参数。

如果试图覆盖 eval属性或把 eval()方法赋予另一个属性,并通过该属性调用它,则 ECMAScript实现允许抛出一个 EvalError异常。

如果参数中没有合法的表达式和语句,则抛出 SyntaxError异常。

如果非法调用 eval(),则抛出 EvalError异常。

如果传递给 eval()的 Javascript代码生成了一个异常,eval()将把该异常传递给调用者。

直接调用时,eval函数相关的执行环境属性ThisBinding,LexicalEnvironment,VariableEnvironment的值如下:

a) ThisBinding是调用eval函数时,调用方执行环境的ThisBinding

b) LexicalEnvironment是调用eval函数时,调用方执行环境的LexicalEnvironment

c) VariableEnvironemnt是调用eval函数时,调用方执行环境的VariableEnvironment

所谓间接调用,即将eval赋值给另一个变量后在调用

在严格模式下,eval的LexicalEnvironment,VariableEnvironment指向属于eval自己的Lexcial Environment,而不是调用方的Lexical Environment,但是ThisBinding还是调用方的ThisBinding。

同时,在严格模式下如果eval直接调用,那么eval的Lexical Environment的outer指针指向调用方的Lexical Environment,否则,如果是间接调用,那么eval的Lexical Environment的outer指针指向全局环境的Lexical Environment。

参考资料来源:百度百科--eval()

三、为什么javascript使用EVAL函数就提示未定义

1、功能:先解释Javascript代码,然后在执行它

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

3、var the_unevaled_answer="2+ 3";

4、var the_evaled_answer= eval("2+ 3");

5、alert("the un-evaled answer is"+ the_unevaled_answer+" and the evaled answer is"+ the_evaled_answer);

6、如果你运行这段eval程序,你将会看到在JavaScript里字符串"2+ 3"实际上被执行了。所以当你把the_evaled_answer的值设成 eval("2+ 3")时, JavaScript将会明白并把2和3的和返回给the_evaled_answer。

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

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

9、?1234567891011121314 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";}

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

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