java script eval_「eval」js中的eval方法详解(一)–eval方法的初级应用 - seo实验室...

eval

在我看来,js中的eval()方法就是一个js语言的执行器,它能把其中的参数按照javaScript语法进行解析并执行。

语法:

eval(s);

eval()方法中的参数s有多种情况。参数的不同形式,会使eval()方法执行的结果和返回值有差别。下面来说说他们的区别。

eval()方法的参数形式

如果参数s不是字符串,而是整数或者是Function类型,则直接返回该整数或Function

举个栗子

例1:

var x = 1;

var y = eval(x);//eval()方法返回1

var z = eval(1)//eval()方法返回1

例2:

var f = eval(

function(){

console.log("1111");

return 1

}

);

/*

eval()方法返回:

function(){console.log("1111");return 1;}方法

*/

var s = f();//执行方法 s=1,打印日志"1111"

/**>>>>>>>>>>>>>>>**/

var ff = function(){

console.log("1111");

return 1;

};

var f = eval(ff);//eval()方法返回ff方法

var s = ff();//执行ff方法 s=1,打印日志"1111"

/**>>>>>>>>>>>>>>>**/

function ff(){

console.log("1111");

return 1;

};

var f = eval(ff);//eval()方法返回ff方法

var s = ff();//执行ff方法 s=1,打印日志"1111"

如果参数s是字符串,并且字符串中是表达式,则eval()方法会计算字符串中的表达式,返回该表达式计算的结果。

举个栗子

eval("'true'");//返回字符串"true"

eval("ture");//返回Boolean类型的true

eval("1");//返回整数1

eval("[0,1,2]");//返回数组[0,1,2]

eval("2+2");//返回整数4

eval("2+'2'");//返回字符串"22"

如果参数s是字符串,并且字符串中的表达式是JSON格式(此时的JOSN格式外面要加上一对小括号将JSON包围起来),则eval()方法返回该JSON。

举个栗子

var j = "{'aa':11,'bb':22}";

eval("("+j+")");

//返回{"aa":11,"bb":22}

eval("({'aa':11,'bb':22})");

//返回{"aa":11,"bb":22}

eval("({aa:11,bb:22})");

//js中{aa:11,bb:22}这种格式在解析时会转换成{'aa':11,'bb':22}这种格式

eval("{'aa':11,'bb':22}");

//抛出异常

附注

对于eval()方法,上面所说的的JSON格式也是属于表达式的一种。但是如果JSON格式中没有小括号包围,则该eval()方法就不会返回该对象。

如:eval(“{‘aa’:11,’bb’:22}”)这种格式,就不会返回{‘aa’:11,’bb’:22}。

因为eval()方法在处理方括号”{}”时,会把它当成是一个语句块。那么eval()方法只会执行该语句,并不会返回该值(结果是抛出异常)。

正确的写法是:在JSON格式外加上小括号”()”,使其强制类型转换成JSON格式(表达式),并返回该JSON值。这一点和即时函数(function(){})()一样,()的作用也是将该function强制转换成表达式并返回。

如果参数s是字符串,并且字符串中是语句或语句块,则eval()方法会执行该语句或语句块,并且返回undefined

举个栗子

eval("var x='1';");

//返回undefined

console.log(x);

//打印字符串1

/**>>>>>>>>>>>>>>>**/

eval("var x=1;var y=2;var z=x+y;");

//返回undefined

console.log(z+"");

//打印字符串3

/**>>>>>>>>>>>>>>>**/

s = eval("function t(){alert(3)};t();");

//执行定义并调用t的方法:弹出3.并且返回undefined

console.log(s);

//打印undefined

/**>>>>>>>>>>>>>>>**/

eval("var j={sex:'男',age:27};alert(j.age);");

/*

此处的json对象不用小括号"()"括起来。因为该处是执行语句,而非计算表达式

*/

附注

eval()方法中,如果json格式是存在于语句中的,那么该json格式不需要用小括号”()”括起来。表达式中的json要括起来的原因是,eval()要计算表达式并且返回结果。而eval()对语句只是执行,并不会计较返回值(因为返回的都是(undefined)

eval()方法的错误处理机制

如果eval()参数中有非法的表达式和语句,则抛出 SyntaxERROR 异常。

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

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

注:eval()方法在执行js代码时可能会出现异常,所以最好用try…catch语句来执行eval()方法

举个栗子

例1:

var y = "var s = '1ss';s.replace('1','s')";

try{

eval(y);//执行该方法

}catch(exception){

console.warn(exception);

}

例2:

var y = "var s = 1ss;s.replace('1','s')";

try{

eval(y);//抛出异常

}catch(exception){

console.warn(exception);

//打印:unexpected token ILLEGAL

}

例3:

var y = "var s = 1ss;s.replace('1','s')";

try{

var zz = eval;

zz(y);//执行该方法

}catch(exception){

console.warn(exception);

}

相关阅读

私钥、公钥生成Linux环境[vagrant@localhost vagrant_data]$ openssl genrsa -out rsa_1024_priv.pem 1024

Generating RSA priva

js截取两个字符串之间的内容:

var str = "aaabbbcccdddeeefff";

str = str.match(/aaa(\S*)fff/)[1];

alert(str);//结果bbbcccd

我们经常在表单的文本框中做一些验证处理,大家一般都是是限制那些具体要求的输入,而没有考虑到个别用户出于种种原因将文字粘贴到表

一直不是很理解几种js事件绑定之间的区别与联系,今天百度了一下,在此做一总结:1.如果只是简单的绑定一个事件,可以直接写在行内,点击执

本文中主要介绍JSONObject处理json数据时候的一些常用场景和方法。(一)jar包下载所需jar包打包下载百度网盘地址:https://pan.baidu.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值