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.

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

  1. mysql pk uk_「fk」SQL中PK、UK、DF、CK、FK的意思 - seo实验室

    fk PK 主键 constraint primary key UK 唯一约束 DF 约束默认 constrint default for CK 检查约束 constraint check() FK ...

  2. js中indexOf的用法详解

    js中indexOf的用法详解 String.IndexOf 方法 (Char, [startIndex], [count]) 报告指定字符在此实例中的第一个匹配项的索引.搜索从指定字符位置开始,并检 ...

  3. JS中的event 对象详解

    JS中的event 对象详解 JS的event对象 Event属性和方法: 1. type:事件的类型,如onlick中的click: 2. srcElement/target:事件源,就是发生事件的 ...

  4. PHP开发中常见的安全问题详解和解决方法

    PHP开发中常见的安全问题详解和解决方法 参考文章: (1)PHP开发中常见的安全问题详解和解决方法 (2)https://www.cnblogs.com/walblog/articles/83313 ...

  5. java list 重复数据_java 查找list中重复数据实例详解

    java 查找list中重复数据实例详解 需求: 查找一个List集合中所有重复的数据,重复的数据可能不止一堆,比如:aa, bb, aa, bb, cc , dd, aa这样的数据.如果有重复数据, ...

  6. java jstack使用_JAVA语言之JVM 中jstack命令使用详解

    本文主要向大家介绍了JAVA语言之JVM 中jstack命令使用详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. Java程序问题定位时线程栈信息是一个重要线索,如下: " ...

  7. JS中的加号+运算符详解

    加号+运算符 在 JavaScript 中,加法的规则其实很简单,只有两种情况: 把数字和数字相加 把字符串和字符串相加 所有其他类型的值都会被自动转换成这两种类型的值. 为了能够弄明白这种隐式转换是 ...

  8. Node.js中的child_process模块详解

    本文主要给大家介绍了关于Node.js中child_process模块的相关内容,在介绍child_process模块之前,先来看一个例子. const http = require('http'); ...

  9. 有关JS中引号使用的详解

    Q1:到底使用单引号还是双引号 在js的代码中主要使用的是单引号,而在HTML和CSS中使用双引号.为了区分,我们js尽量使用单引号. 当然单双引号本无对错,都是可以使用的. Q2:什么时候需要使用引 ...

最新文章

  1. 2021-03-10 Python多线程爬虫快速批量下载图片
  2. 使用Android Studio打Andorid apk包的流程
  3. flutter 自定义 AppBar
  4. influxdb无法实现关联表_双汇:从棘手的InfluxDB+Redis到TDengine
  5. 计算机网络在实践中的应用,计算机网络技术及在实践中的应用
  6. Python花式编程:考试成绩分类统计(3种方法)
  7. ssm网上球鞋商城(电子商务系统)ssm购物系统,ssm电子产品销售ssm鞋店销售购物ssm商城源码JSP购物系统
  8. W5500+STM32F103C8T6进行TCP通信(modbus)
  9. Vista 如何关闭UAC(用户帐户控制)
  10. Windows 7 多国语言包(MUI)
  11. windows运行中自定义命令创建/自定义bat文件创建
  12. Linux- 控制 LED 灯设备(LED 子系统)
  13. 最新ECS阿里云服务器租用价格表,优惠活动(实时更新)
  14. 【笔记】YOLOv3训练自己的数据集(2)——训练和测试训练效果
  15. 【微信小程序学习笔记02理解与初始准备】【实战天气微信小程序】
  16. 苹果CMS网站awd复现
  17. 密码长度最小值修改为15位、16位
  18. MySQL 完全备份 + 增量备份+完全恢复
  19. maya mel uf8_Maya Mel语言
  20. 十二核能让联发科引爆核弹战吗?

热门文章

  1. linux下装文件,linux下文件的安装方法与卸载方法。~
  2. c语言qsort函数源码,qsort源代码分析
  3. 滚动时间选择器recyclerview_Android自定义可循环的滚动选择器CycleWheelView
  4. python123蟒蛇代码_巨蟒python全栈开发-第3天
  5. win10下zookeeper的下载以及安装
  6. python opencv findcontours_OpenCV之视频分析 – 背景消除与前景ROI提取
  7. 简单Android app开发_如何简单快速开发外卖app?
  8. c语言disp是什么意思及用法,disp(disp是什么功能)
  9. 最好用的Unity代码编辑器Rider如何免费申请?
  10. Visual Studio Code 1.43 发布