JavaScript中eval()函数用法详解


Posted in Javascript onDecember 14, 2015

eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行。

如果参数是一个表达式,eval() 函数将执行表达式。如果参数是Javascript语句,eval()将执行 Javascript 语句。

语法

eval(string)

参数 描述
string 必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。

eval()函数用法详解:

此函数可能使用的频率并不是太高,但是在某些情况下具有很大的作用,下面就介绍一下eval()函数的用法。

此函数可以接受一个字符串str作为参数,并把此str当做一段javascript代码去执行,如果str执行结果是一个值则返回此值,否则返回undefined。如果参数不是一个字符串,则直接返回该参数,实例如下:

eval("var a=1");//声明一个变量a并赋值1。
eval("2+3");//执行加运算,并返回运算值。
eval("mytest()");//执行mytest()函数。
eval("{b:2}");//声明一个对象。

在以上代码特别注意的是,最后一个语句是声明了一个对象,如果想返回此对象,则需要在对象外面再嵌套一层小括号,如下:

eval("({b:2})");

以上内容简单介绍了eval()函数的用法,比较容易理解。此函数最让人感到困惑的是关于它的作用域问题,下面就结合实例来介绍一下相关内容,先看一段代码实例:

function a(){ 
 eval("var x=1"); 
 console.log(x); 
} 
a(); 
console.log(x);

在上面的代码中,第一个alert()函数能够弹出1,而第二个会因为x未定义而报错。
由以上表现可以得出,eval()函数并不会创建一个新的作用域,并且它的作用域就是它所在的作用域。这在所有主流浏览器都是如此,但是有时候需要将eval()函数的作用域设置为全局,当然可以将eval()在全局作用域中使用,但是往往实际应用中,需要在局部作用域使用具有全局作用域的此函数,这个时候可以用window.eval()的方式实现,例如以上代码可以改造如下:

function a(){ 
 window.eval("var x=1"); 
 console.log(x); 
} 
a(); 
console.log(x);

在上面的代码中,两个alert()语句都能够正常弹出1。但是此中方式在标准浏览器中是可以的,但是在IE8和IE8以下浏览器中的表现依然和eval()一样,作用域是它们所在的作用域。这个时候可以使用IE浏览器独有的window.execScript()解决IE8和IE8浏览器的问题。为了实现兼容所有主流浏览器,把代码改造如下:

function a(){ 
 if(window.execScript){ 
  window.execScript("var x=1"); 
 } 
 else{ 
  window.eval("var x=1"); 
 } 
 console.log(x); 
} 
a(); 
console.log(x);

如果浏览器支持window.execScript(),则使用此函数,不支持则使用window.eval(),这样就可以解决IE8和IE8以下浏览器的问题。

以上内容是小编给大家分享的JavaScript中eval()函数用法详解,希望大家喜欢。

Javascript 相关文章推荐
innerHTML 和 getElementsByName 在IE下面的bug 的解决
Apr 09 Javascript
jquery keypress,keyup,onpropertychange键盘事件
Jun 25 Javascript
js模拟hashtable的简单实例
Mar 06 Javascript
jQuery中animate动画第二次点击事件没反应
May 07 Javascript
JavaScript实现简单的拖动效果
Jul 02 Javascript
基于JavaScript实现购物车功能
Feb 07 Javascript
js获取元素下的第一级子元素的方法(推荐)
Mar 05 Javascript
深入浅析Vue全局组件与局部组件的区别
Jun 15 Javascript
JS module的导出和导入的实现代码
Feb 25 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
Dec 22 Javascript
javascript+css实现俄罗斯方块小游戏
Jun 28 Javascript
JSON stringify方法原理及实例解析
Oct 23 Javascript
JS实现单击输入框弹出选择框效果完整实例
Dec 14 #Javascript
JavaScript实现点击按钮就复制当前网址
Dec 14 #Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
Dec 14 #Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
Dec 14 #Javascript
基于JavaScript实现一定时间后去执行一个函数
Dec 14 #Javascript
javascript中new关键字详解
Dec 14 #Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
Dec 14 #Javascript
You might like
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
php遍历类中包含的所有元素的方法
2015/05/12 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
js 操作select相关方法函数
2009/12/06 Javascript
js 动态文字滚动的例子
2011/01/17 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
jquery实现增加删除行的方法
2015/02/03 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
2015/12/16 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
2017/07/17 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
angular4 JavaScript内存溢出问题
2018/03/06 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
解决layer弹出层msg的文字不显示的问题
2019/09/11 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
[04:10]2018年度CS GO玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
Python中用Decorator来简化元编程的教程
2015/04/13 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
python 从文件夹抽取图片另存的方法
2018/12/04 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
django 快速启动数据库客户端程序的方法示例
2019/08/16 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
Python Pillow(PIL)库的用法详解
2020/09/19 Python
使用django自带的user做外键的方法
2020/11/30 Python
tensorflow与numpy的版本兼容性问题的解决
2021/01/08 Python
英国领先的狗和宠物美容专家:Christies Direct
2017/04/03 全球购物
博士生入学考试推荐信
2013/11/17 职场文书
办公室前台的岗位职责
2013/12/20 职场文书
成绩单家长评语大全
2014/04/16 职场文书
团委竞选演讲稿
2014/04/24 职场文书
校园安全演讲稿
2014/05/09 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
生物学专业求职信
2014/07/23 职场文书