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.
java script eval_「eval」js中的eval方法详解(一)–eval方法的初级应用 - seo实验室...相关推荐
- 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 ...
- js中indexOf的用法详解
js中indexOf的用法详解 String.IndexOf 方法 (Char, [startIndex], [count]) 报告指定字符在此实例中的第一个匹配项的索引.搜索从指定字符位置开始,并检 ...
- JS中的event 对象详解
JS中的event 对象详解 JS的event对象 Event属性和方法: 1. type:事件的类型,如onlick中的click: 2. srcElement/target:事件源,就是发生事件的 ...
- PHP开发中常见的安全问题详解和解决方法
PHP开发中常见的安全问题详解和解决方法 参考文章: (1)PHP开发中常见的安全问题详解和解决方法 (2)https://www.cnblogs.com/walblog/articles/83313 ...
- java list 重复数据_java 查找list中重复数据实例详解
java 查找list中重复数据实例详解 需求: 查找一个List集合中所有重复的数据,重复的数据可能不止一堆,比如:aa, bb, aa, bb, cc , dd, aa这样的数据.如果有重复数据, ...
- java jstack使用_JAVA语言之JVM 中jstack命令使用详解
本文主要向大家介绍了JAVA语言之JVM 中jstack命令使用详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. Java程序问题定位时线程栈信息是一个重要线索,如下: " ...
- JS中的加号+运算符详解
加号+运算符 在 JavaScript 中,加法的规则其实很简单,只有两种情况: 把数字和数字相加 把字符串和字符串相加 所有其他类型的值都会被自动转换成这两种类型的值. 为了能够弄明白这种隐式转换是 ...
- Node.js中的child_process模块详解
本文主要给大家介绍了关于Node.js中child_process模块的相关内容,在介绍child_process模块之前,先来看一个例子. const http = require('http'); ...
- 有关JS中引号使用的详解
Q1:到底使用单引号还是双引号 在js的代码中主要使用的是单引号,而在HTML和CSS中使用双引号.为了区分,我们js尽量使用单引号. 当然单双引号本无对错,都是可以使用的. Q2:什么时候需要使用引 ...
最新文章
- 2021-03-10 Python多线程爬虫快速批量下载图片
- 使用Android Studio打Andorid apk包的流程
- flutter 自定义 AppBar
- influxdb无法实现关联表_双汇:从棘手的InfluxDB+Redis到TDengine
- 计算机网络在实践中的应用,计算机网络技术及在实践中的应用
- Python花式编程:考试成绩分类统计(3种方法)
- ssm网上球鞋商城(电子商务系统)ssm购物系统,ssm电子产品销售ssm鞋店销售购物ssm商城源码JSP购物系统
- W5500+STM32F103C8T6进行TCP通信(modbus)
- Vista 如何关闭UAC(用户帐户控制)
- Windows 7 多国语言包(MUI)
- windows运行中自定义命令创建/自定义bat文件创建
- Linux- 控制 LED 灯设备(LED 子系统)
- 最新ECS阿里云服务器租用价格表,优惠活动(实时更新)
- 【笔记】YOLOv3训练自己的数据集(2)——训练和测试训练效果
- 【微信小程序学习笔记02理解与初始准备】【实战天气微信小程序】
- 苹果CMS网站awd复现
- 密码长度最小值修改为15位、16位
- MySQL 完全备份 + 增量备份+完全恢复
- maya mel uf8_Maya Mel语言
- 十二核能让联发科引爆核弹战吗?
热门文章
- linux下装文件,linux下文件的安装方法与卸载方法。~
- c语言qsort函数源码,qsort源代码分析
- 滚动时间选择器recyclerview_Android自定义可循环的滚动选择器CycleWheelView
- python123蟒蛇代码_巨蟒python全栈开发-第3天
- win10下zookeeper的下载以及安装
- python opencv findcontours_OpenCV之视频分析 – 背景消除与前景ROI提取
- 简单Android app开发_如何简单快速开发外卖app?
- c语言disp是什么意思及用法,disp(disp是什么功能)
- 最好用的Unity代码编辑器Rider如何免费申请?
- Visual Studio Code 1.43 发布