定义和用法

  Eval它是用来计算某个字符串,并且执行其中的JavaScript代码。

  语法

  1) eval函数接受一个string这个参数,并且这个参数是必须的,这个参数就是要计算的这个字符串。它里面可以函数含有JavaScript的表达式,或者要执行的语句。

  eval(string)。

  2) 那,这个既然是函数,就有可能有返回值。它的返回值是:如果这个string参数有返回值的话,那这个函数就原样返回这个string执行完毕的结果。

  3) 有一个地方值得注意,这个eval函数只接受原始的字符串作为参数。如果string参数不是原始字符串,那该方法将不做任何改变的返回。因此,我们不要为这个函数传递一些string对象来作为参数。并且,如果我们试图覆盖eval这个属性,把eval函数赋值给另外一个属性,有可能会抛出一些异常。

  4) 并且,如果这个参数中没有合法的表达式或者语句,有可能会抛出语法错误的异常。

  可以看到,我们的eval函数,功能非常强大。所以,我们在实际应用中应该要更加注意它的合法性、合理性。

  查看示例

  1. 看这一行示例

  eval("x=10;y=20;document.write(x*y)");

  我在里面给它传递进入了一些执行语句。

  1) 我先赋值x=10,然后y=20。

  2) 然后我再给x和y做一个乘法。

  再把它们的结果输出来。

  那我们的eval函数会把这3条语句作为参数,用来执行。

  我们看一下执行结果,刷新浏览器。

  看到了我们的x * y,也就是10 * 20,确实等于200。

  这是我们的多条表达式语句。

  2. 看另外一个例子:document.write(eval("2+2"));

  1) 里面我们直接执行2+2,那么它执行的结果应该是4。

  2) 那么这eval函数返回这个4给document.write的输出,那应该输出为4。

  刷新浏览器,确实也得到了为4 的结果。

  3. 再做一个简单的示例

  1) 例如我定义一个这样的x变量。

  var x = 10;

  2) 然后我输出它在里面用变量做一个计算。

  document.write(eval(x+7));

  3) 我们看它是不是返回我们想要的结果,应该是返回17,刷新浏览器。

  其实,它就是在这里x为10,10 加 7等于17,然后eval执行完只有返回17,由document.write打印在页面上。

  这是我们在字符串下的eval函数的使用

  在其它情况下的应用

  它的返回结果是怎么样的?

  1.辟如,这个:eval("2+3");

  我们是直接传了一个2 + 3在里面,它应该会执行,执行完了之后它就会被返回5。

  但是我们这里没有做任何的输出,所以我们应该是看不到这个效果的,它是它仍然是会正常执行的。

  2. 那我们把这个eval函数赋值给这个变量

  var myeval = eval;

  这个有可能会抛出来异常,所以我们在实际项目中,不建议这么使用。虽然我们在有些浏览器里面可能不会抛出异常。

  1) 刷新浏览器:

它是执行了下面的代码:

  var x = 10;

  document.write(eval(x+7));

  eval("2+3");

  var myeval = eval;

  try {

  alert("Result:" + eval(prompt("Enter an expression", "")));

  } catch(e) {

  alert(e);

  }

  2) 我们这个刷新,它并没有抛出异常,所以它在Chrome浏览器里面应该是可以正常执行的。

  3) 我们看一下这段代码,这是用来检测这个eval参数是否合法的。

  try {

  alert("Result:" + eval(prompt("Enter an expression", "")));

  } catch(e) {

  alert(e);

  }

  a) 首先使用 try catch 包裹起来。

  b) 然后执行了一个alert函数,alert函数里面是Result这个字符串 + eval函数的返回值。

  c) eval里面执行了,弹出一个弹框,就是一个交互的对话框,供用户输入一个表达式。

  然后作为执行结果再返回。

  刷新浏览器,这个弹出框是通过eval函数来执行的,执行的时候,它提示输入一个表达式。

  例如我输入2+3,那eval函数执行这个2+3之后,应该会返回5,返回5之后,跟Resul这个字符串相接,然后传递给alert函数,所以会弹出来一个5。

  这就是eval函数在一些其它情况下的使用。

  eval函数是如何解析JSON格式字符串的

  1. 什么是Json格式的字符串呢?

  Json是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器生成、解析。

  2. 下面,我写一个json格式的字符串。

  1) Json字符串外面是一个大括号。

  2) 里面就是类似于我们的字典一样的。

  3. 我们利用JavaScript内置的eval函数,将JSON格式的字符串转换成json对象时,我们怎么操作?

  1) 我们需要用一个小括号,先将这个字符串包住。

  2) 例如上面的这个字符串,我给它赋值一个txt这样的一个变量。

  赋值变量的时候,我们需要用括号给它括起来。

  外面用双引号的时候,里面就要用单引号。

  var txt = "{'userid':11,'name':'liyi'}";

  3) 然后再解析,它会把这个字符串解析成json的对象。

  然后通过我们的eval函数,在里面加一对小括号。

  然后把这个字符串连接起来。

  var txtObj = eval("("+txt+")");

  4) 这个时候,我们就把解析之后的对象的userid做一次输出。

  document.write(txtObj.userid);

  刷新浏览器,它就将我们的json字符串解析成了一个json的对象。

  通过这个对象的.,输出了它的一个属性。Userid为11。这就是我们想要的正确的结果。

原文链接:http://www.maiziedu.com/wiki/ajax/eval/

Ajax中eval的使用详解的更多相关文章

  1. ajax中的stasus错误详解

    一.英文版解析 0: (Uninitialized) the send( ) method has not yet been invoked. 1: (Loading) the send( ) met ...

  2. Ajax中的XMLHttpRequest对象详解

    XMLHttpRequest对象是Ajax技术的核心.在Internet Explorer 5中,XMLHttpRequest对象以ActiveX对象引入,被称之为XMLHTTP,它是一种支持异步请求 ...

  3. Ajax中的XMLHttpRequest对象详解(转)

    XMLHttpRequest对象是Ajax技术的核心.在Internet Explorer 5中,XMLHttpRequest对象以ActiveX对象引入,被称之为XMLHTTP,它是一种支持异步请求 ...

  4. ajax中error函数参数详解

    xhr.status和error函数中的status是不一样的,error函数中的status主要包括:"success"."notmodified".&quo ...

  5. eval()函数用法详解

    eval()函数用法详解:此函数可能使用的频率并不是太高,但是在某些情况下具有很大的作用,下面就介绍一下eval()函数的用法.语法结构: eval(str) 此函数可以接受一个字符串str作为参数, ...

  6. Bind和Eval的区别详解

    原文:Bind和Eval的区别详解 1.简单描述Eval和Bind的区别 绑定表达式 <%# Eval("字段名") %> <%# Bind("字段名& ...

  7. Asp.net中web.config配置文件详解(一)

    本文摘自Asp.net中web.config配置文件详解 web.config是一个XML文件,用来储存Asp.NET Web应用程序的配置信息,包括数据库连接字符.身份安全验证等,可以出现在Asp. ...

  8. gvoory脚本中关于HttpClient使用详解实例

    一.gvoory脚本中关于HttpClient使用详解实例 HttpClient:是一个接口 首先需要先创建一个DefaultHttpClient的实例 HttpClient httpClient=n ...

  9. C#中string.format用法详解

    C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...

随机推荐

  1. SharePoint API测试系列——Records.BypassLocks测试

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 对于SharePoint中已经是Record的Item,我们想要修改他的属性,这在UI界面是无法完 ...

  2. reactjs入门到实战(二)---- jxs详解

    >>>如何转换    JSX transformer   Babel    官网:http://babeljs.io/   里面有一个可以看转换的测试器,es6什么的也可以应用: 注 ...

  3. 控制窗口不能拖拉出主窗口 Dialog And Window

    /* 控制窗口不能拖拉出主窗口(覆写) */var easyuiPanelOnMove = function(left, top) { if ($(this).panel('options').reS ...

  4. python学习笔记五 模块下(基础篇)

    shevle 模块 扩展pickle模块... 1.潜在的陷进 >>> import shelve>>> s = shelve.open("nb" ...

  5. POJ 3320 Jessica's Reading Problem 尺取法

    Description Jessica's a very lovely girl wooed by lots of boys. Recently she has a problem. The fina ...

  6. java导出cvs文件

    package testcvs; import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;i ...

  7. DataGridView的自定义列排序

    1,将需要进行排序的列做属性的设置 this.colUserName.SortMode = DataGridViewColumnSortMode.Programmatic; 2,添加列的事件 //点击 ...

  8. 修改 OWA 修改密码的生效时间

    从 Exchange 中文站之前的文章配置 OWA 下次登录时更改密码中, 我们知道在 Exchange 2010 SP1 当中是可以配置在 OWA 中修改域用户的密码的,那么不知道你是否有发现,当用 ...

  9. 【leetcode❤python】Binary Watch

    #-*- coding: UTF-8 -*- from itertools import combinationsclass Solution(object):        hourList=[8, ...

  10. 【转载】C++知识库内容精选 尽览所有核心技术点

    原文:C++知识库内容精选 尽览所有核心技术点 C++知识库全新发布. 该知识库由C++领域专家.CSDN知名博客专家.资深程序员和项目经理安晓辉(@foruok)绘制C++知识图谱,@wangshu ...