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 相关文章推荐
javascript刷新父页面的各种方法汇总
Sep 03 Javascript
node.js中的fs.readFile方法使用说明
Dec 15 Javascript
javascript跨域原因以及解决方案分享
Apr 08 Javascript
轻松掌握JavaScript单例模式
Aug 25 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
Nov 27 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
Feb 18 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
Jan 09 Javascript
vue脚手架搭建过程图解
Jun 06 Javascript
详解如何在nuxt中添加proxyTable代理
Aug 10 Javascript
vue  directive定义全局和局部指令及指令简写
Nov 20 Javascript
微信小程序使用map组件实现解析经纬度功能示例
Jan 22 Javascript
vue中的v-if和v-show的区别详解
Sep 01 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
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
分享php分页的功能模块
2015/06/16 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
Track Image Loading效果代码分析
2007/08/13 Javascript
用dom+xhtml+css制作的一个相册效果代码打包下载
2008/01/24 Javascript
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
js的2种继承方式详解
2014/03/04 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
2015/08/10 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
2016/05/07 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
vue使用video.js进行视频播放功能
2019/07/18 Javascript
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
跟老齐学Python之数据类型总结
2014/09/24 Python
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
对python遍历文件夹中的所有jpg文件的实例详解
2018/12/08 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
Java软件工程师综合面试题笔试题
2013/09/08 面试题
十一酒店活动方案
2014/02/20 职场文书
学生评语大全
2014/04/18 职场文书
机械电子工程专业求职信
2014/06/22 职场文书
机械设备与数控技术专业求职信
2014/08/10 职场文书
婚礼答谢礼品
2015/01/20 职场文书
体育活动总结
2015/02/04 职场文书
机关工会工作总结2015
2015/05/26 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
学习心得体会
2019/06/20 职场文书