eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行,本文给大家
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行。
如果参数是一个表达式,eval() 函数将执行表达式。如果参数是 Javascript 语句,eval() 将执行 Javascript 语句。
语法
- eval(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() 函数用法详解,希望大家喜欢。
来源: