Ajax中的eval函数的用法
eval的定义和使用:
Eval它是用来计算某个字符串,并且执行其中的JavaScript代码。
语法:
1) eval函数接受一个string这个参数,并且这个参数是必须的,这个参数就是要计算的这个字符串。它里面可以函数含有JavaScript的表达式,或者要执行的语句。
eval(string)。
2) 那,这个既然是函数,就有可能有返回值。它的返回值是:如果这个string参数有返回值的话,那这个函数就原样返回这个string执行完毕的结果。
3) 有一个地方值得注意,这个eval函数只接受原始的字符串作为参数。如果string参数不是原始字符串,那该方法将不做任何改变的返回。因此,我们不要为这个函数传递一些string对象来作为参数。并且,如果我们试图覆盖eval这个属性,把eval函数赋值给另外一个属性,有可能会抛出一些异常。
4) 并且,如果这个参数中没有合法的表达式或者语句,有可能会抛出语法错误的异常。
可以看到,我们的eval函数,功能非常强大。所以,我们在实际应用中应该要更加注意它的合法性、合理性
实例:
eval("x=10;y=20;document.write(x*y)");
我在里面给它传递进入了一些执行语句。
1) 我先赋值x=10,然后y=20。
2) 然后我再给x和y做一个乘法。
再把它们的结果输出来。
那我们的eval函数会把这3条语句作为参数,用来执行。
输出200
看到了我们的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;
这个有可能会抛出来异常,所以我们在实际项目中,不建议这么使用。虽然我们在有些浏览器里面可能不会抛出异常。
它是执行了下面的代码:
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里面执行了,弹出一个弹框,就是一个交互的对话框,供用户输入一个表达式。
然后作为执行结果再返回。
例如我输入2+3,那eval函数执行这个2+3之后,应该会返回5,返回5之后,跟Resul这个字符串相接,然后传递给alert函数,所以会弹出来一个5。
eval函数是如何解析JSON格式字符串的
1. 什么是Json格式的字符串呢?
Json是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器生成、解析。
2. 下面,我写一个json格式的字符串。
{“userid”:11,‘name’:‘sunliyuan’}
1) Json字符串外面是一个大括号。
2) 里面就是类似于我们的字典一样的。
3. 我们利用JavaScript内置的eval函数,将JSON格式的字符串转换成json对象时,我们怎么操作?
1) 我们需要用一个小括号,先将这个字符串包住。
2) 例如上面的这个字符串,我给它赋值一个txt这样的一个变量。
var txt={“userid”:11,‘name’:‘sunliyuan’}
赋值变量的时候,我们需要用括号给它括起来。
外面用双引号的时候,里面就要用单引号。
var txt = "{'userid':11,'name':'liyi'}";
3) 然后再解析,它会把这个字符串解析成json的对象。
然后通过我们的eval函数,在里面加一对小括号。
然后把这个字符串连接起来。
var txtObj = eval("("+txt+")");
4) 这个时候,我们就把解析之后的对象的userid做一次输出。
document.write(txtObj.userid);
刷新浏览器,它就将我们的json字符串解析成了一个json的对象。 输出11
通过这个对象的.,输出了它的一个属性。Userid为11。这就是我们想要的正确的结果。
我们的实例里面有3种实例情况。
1. 第一种是字符串上,我们直接输进去了执行语句。
它会返回正常的结果。
2. 第二种情况,我们把这个eval赋值给了一些属性,并且我们也在里面直接实现了一些表达式,还用来检测了这个eval的参数是否合法。
3. 然后,我们用eval来解析了这个json格式的字符串。
它解析json格式的字符串,就在原来的字符串左右两边加上小括号,它就会把我们的json字符串解析成为一个json对象。
然后我们通过对象的属性的访问形式,就可以取到里面的值。
Ajax中的eval函数的用法的更多相关文章
- matlab中的eval函数使用
matlab中的eval函数使用 在matlab的命令行窗口中输入help eval命令回车就可以看到eval函数的官方解释,大概的意思就是执行matlab中的表达式,计算expression表示的代 ...
- Python eval()函数的用法
Python eval()函数的用法 eval(str)函数很强大,官方解释为:将字符串str当成有效的表达式来求值并返回计算结果.所以,结合math当成一个计算器很好用. eval()函数常见作用有 ...
- C语言中关于scanf函数的用法
scanf()函数的控制串 函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化 ...
- JavaScript中字符串分割函数split用法实例
这篇文章主要介绍了JavaScript中字符串分割函数split用法,实例分析了javascript中split函数操作字符串的技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了JavaSc ...
- C中的时间函数的用法
C中的时间函数的用法 这个类展示了C语言中的时间函数的常用的用法. 源代码: #include <ctime>#include <iostream> using name ...
- (转)Python中的split()函数的用法
Python中的split()函数的用法 原文:https://www.cnblogs.com/hjhsysu/p/5700347.html Python中有split()和os.path.split ...
- JavaScript中eval函数的用法
1. eval函数会计算传给的字符串, 并把作为脚本代码来执行. eval(str) 此函数接受一个字符串作为参数,并把str当做一段JavaScript脚本代码来执行,如果str执行结果返回一个值则 ...
- JavaScript中的eval()函数
和其他很多解释性语言一样,JavaScript同样可以解释运行由JavaScript源代码组成的字符串,并产生一个值.JavaScript通过全局函数eval()来完成这个工作. eval(“1+2” ...
- ajax中的suceess函数使用this
今天在写ajax的时候,后台返回数据给前台,可是总是不能把数据正常显示在页面上... 明明已经进入了success函数了,并且在该代码的前后都能够正常执行.. success: function (r ...
随机推荐
- javasE学习笔记:关键字super的使用
/* super 的作用: 1 . super可以在子类中引用父类的成员,通过 .的方式和属性.this相对应. 2. 在子类的构造方法中可以可使用super(参数列表)语句调用父类的构造方法 3. ...
- HDU 1864
最大报销额 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- jquery改变元素的值的函数text(),html(),val()
text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容(包括 HTML 标记) val() - 设置或返回表单字段的值,适合于标签中有value属性的标签. 代码: ...
- 时间序列数据库选型——本质是列存储,B-tree索引,抑或是搜索引擎中的倒排索引
时间序列数据库最多,使用也最广泛.一般人们谈论时间序列数据库的时候指代的就是这一类存储.按照底层技术不同可以划分为三类. 直接基于文件的简单存储:RRD Tool,Graphite Whisper.这 ...
- 初学ExtJs 表格显示后台数据
最近开始接触ExtJs,贴出自己的代码,一个简单的表格显示 版本 3.4.1 需要json包 代码清单1.jsp引入的ExtJs文件 <!-- 资源文件 ExtJs --> <lin ...
- 在Excel中引用其他宏
在excel的使用过程中,会用到一些自定义函数,可以使用宏轻松的实现这些功能,问题是必须使用“启用宏的excel”,这样用户每次打开时都要启用宏. 现用以按背景色计划为例,解决以上问题: 1.新建一个 ...
- socket.io遇到的问题
一.socket.io指定客户端html文件所用到的sendFile()方法中的文件路径必须是绝对路径,而且要符合一定规则: app.get('/',function(req,res){ res.se ...
- hdu 4638 Group
http://acm.hdu.edu.cn/showproblem.php?pid=4638 问题其实就是求[L,R]中有多少个连续的段 若每一个人都是一个段 那么[L,R]中每一个朋友关系就会减少一 ...
- Java:String、StringBuffer和StringBuilder的区别
1 String String:字符串常量,字符串长度不可变.Java中String是immutable(不可变)的. String类的包含如下定义: /** The value is used fo ...
- 【未完成0.0】Noip2012提高组day2 解题报告
第一次写一套题的解题报告,感觉会比较长.(更新中Loading....):) 题目: 第一题:同余方程 描述 求关于x的同余方程ax ≡ 1 (mod b)的最小正整数解. 格式 输入格式 输入只有一 ...