JavaScript eval() 函数的用法以及危害

JavaScript eval() 函数

定义和用法

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

语法

  1. eval(string) 

参数 描述

string 必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。

返回值

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

说明

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

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

抛出

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

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

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

提示和注释

提示:虽然 eval() 的功能非常强大,但在实际使用中用到它的情况并不多。

例子:

  1. <SCRIPT language="javascript"
  2. function showsubmenu(sid) 
  3. whichEl = eval("submenu" + sid); 
  4. if (whichEl.style.display == "none"
  5. eval("submenu" + sid + ".style.display=\"\";"); 
  6. else 
  7. eval("submenu" + sid + ".style.display=\"none\";"); 
  8. </SCRIPT> 

另外说一下eval()的危害

eval()接受任意的字符串,并当作JavaScript代码来处理,这个机制已经有安全隐患了!  

一般生成对象建议用JavaScript内置的方法处理,比如,解析json的时候用JSON.parse(),如果在流程中必须使用eval()的时候建议考虑 new Function()代替。

有一个小的潜在好处,因为在新Function()中作代码评估是在局部函数作用域中运行,所以代码中任何被评估的通过var 定义的变量都不会自动变成全局变量。(本论点有网友亚当提出,仅供参考!)

转载请注明:代码家园 » JavaScript eval() 函数的用法以及危害

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)