定义和用法

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

语法

eval_r(string)

参数

描述

string

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

返回值

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

说明

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

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

抛出

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

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

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

提示和注释

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

eg:

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

eval_r()函数
   
   JavaScript有许多小窍门来使编程更加容易。
   其中之一就是eval_r()函数,这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它。
   举个小例子:
    //执行表达式
   var the_unevaled_answer = "2 + 3";
   var the_evaled_answer = eval_r("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_r("2 + 3")时, JavaScript将会明白并把2和3的和返回给the_evaled_answer。
   这个看起来似乎有点傻,其实可以做出很有趣的事。比如使用eval你可以根据用户的输入直接创建函数。
   这可以使程序根据时间或用户输入的不同而使程序本身发生变化,通过举一反三,你可以获得惊人的效果。
   在实际中,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="http://a.com/a.gif" name="parrot"]
   [img src="http://b.com/b.gif" name="cheese"]
   [code]
   请注意象这样的几行语句:
   [code]
   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_r(the_image_name);
   the_image_object.src = "ant.gif";
   }
   
   如果用户在提示框里填入"parrot",在第二行里创建了一个字符串即window.document.parrot. 然后包含了eval的第三
   行意思是: "给我对象window.document.parrot" - 也就是你要的那个图象对象。一旦你获取了这个图象对象,你可以把
   它的src属性设为ant.gif. 有点害怕?用不着。其实这相当有用,人们也经常使用它。
   我们常常在Javascript中间到Eval这个函数,
   有些人觉得这个函数很奇怪,可以把一些字符串变的功能很强大
   在我们需要将普通的字符串转变成具体的对象的时候,就会用到这个函数
   
   eval 函数对作为数字表达式的一个字符串进行求值,其语法为:
   
   eval_r(expr)
   
   此处 expr 是一个被求值的字符串参数。如果该字符串是一个表达式,eval 求该表达式的值;如果该参数代表一个或多个 JavaScript 语句,那么 eval 执行这些语句。eval 函数可以用来把一个日期从一种格式(总是字符串)转换为数值表达式或数字

JavaScript eval_r() 函数的更多相关文章

  1. JavaScript中函数函数的定义与变量的声明<基础知识一>

    1.JavaScript中函数的三种构造方式 a.function createFun(){ } b.var createFun=function (){ } c.var createFun=new ...

  2. 理解 JavaScript 回调函数并使用

    JavaScript中,函数是一等(first-class)对象:也就是说,函数是 Object 类型并且可以像其他一等对象(String,Array,Number等)一样使用.它们可以"保 ...

  3. 5种 JavaScript 调用函数的方法

    一次又一次的,我发现,那些有bug的Javascript代码是由于没有真正理解Javascript函数是如何工作而导致的(顺便说一下,许多那样的代码是我写的).JavaScript拥有函数式编程的特性 ...

  4. javascript escape()函数和unescape()函数

    javascript escape()函数和unescape()函数 escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串. 语法: escape(string) stri ...

  5. JavaScript调用函数的方法

    摘要:这篇文章详细的介绍了Javascript中各种函数调用的方法及其原理,对于理解JavaScript的函数有很大的帮助! 一次又一次的,我发现,那些有bug的Javascript代码是由于没有真正 ...

  6. Javascript常用方法函数收集(二)

    Javascript常用方法函数收集(二) 31.判断是否Touch屏幕 function isTouchScreen(){ return (('ontouchstart' in window) || ...

  7. javascript工具函数

    第一部分 JavaScript工具函数 转义特殊字符为html实体   HtmlEncode: function(str){ return str.replace(/&/g, '&') ...

  8. [转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")

    javascript eval函数解析json数据时为什么 加上圆括号?为什么要 eval这里要添加 “("("+data+")");//”呢?   原因在于: ...

  9. javascript篇-----函数作用域,函数作用域链和声明提前

    在一些类似C语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的(也就是我们不能在代码段外直接访问代码段内声明的变量),我们称之为块级作用域,然而,不同于 ...

随机推荐

  1. 实例直观解释sessionid的作用

    有两个php页面,demo1.php与demo2.php.如果想要在demo1.php创建一个session需要在的demo2.php或者说其它页面都可以获取到设置的session的值,达到会话的功能 ...

  2. win8设置开机启动项

    c:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

  3. VBA注释临时

    Sub shishi() '按ABCDE为多选题定义答案; 'A.沙利度胺 B.异烟肼 C.利福平 'd.氯法齐明 E.氨苯砜 '46.各型麻风病的首选药物为(D) 'A.沙利度胺 B.异烟肼 C.利 ...

  4. C/C++基础----string, vector, array

    1 using声明 方便使用命名空间中的成员,不用每次xxx::yyy 头文件不应该包含using声明(不经意间包含了一些名字) 2 string 表3.1:初始化string对象的方式 string ...

  5. 【Hibernate学习笔记-5】@Formula注解的使用

    ORM映射关系:注解方式 package org.crazyit.app.domain; import javax.persistence.*; import org.hibernate.annota ...

  6. 杂项:.NET Framework

    ylbtech-杂项:.NET Framework Microsoft .NET Framework是用于Windows的新托管代码编程模型.它将强大的功能与新技术结合起来,用于构建具有视觉上引人注目 ...

  7. golang web框架 beego 学习 (四) 连接mysql

    1 DB参数配置在app.conf appname = gowebProject httpport = runmode = dev [db] host= localhost port= databas ...

  8. 牛客网暑期ACM多校训练营(第七场)J题(Sudoku Subrectangles)题解

    一.题意 给定一个高度为$n$,宽度为$m$的字母矩形(有大写和小写字母,共$52$种),问里面有多少个子矩形是“数独矩形”.数独矩形是指,该矩形内每一行内元素都不相同,每一列内元素也不相同. 二.思 ...

  9. sqoop操作之ETL小案例

    Extraction-Transformation-Loading的缩写,中文名称为数据提取.转换和加载.将数据从ORACLE中抽取数据,经过hive进行分析转换,最后存放到ORACLE中去. 本案例 ...

  10. python 四种数值类型(int,long,float,complex)介绍

    Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下. 数字数据 ...