我是靠谱客的博主 强健猫咪,最近开发中收集的这篇文章主要介绍javascript eval函数详细说明与兼容处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。 语法 eval(string)参数 描述 string 必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。 


eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
语法
eval(string)参数 描述 
string 必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。
返回值
通过计算 string 得到的值(如果有的话)。
先来说eval的用法,内容比较简单,熟悉的可以跳过。
eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefined。
需要特别注意的是对象声明语法“{}”并不能返回一个值,需要用括号括起来才会返回值,简单示例如下:
var code1='"a" + 2';    //表达式
var code2='{a:2}';      //语句
alert(eval(code1));     //->'a2'
alert(eval(code2));     //->undefined
alert(eval('(' + code2 + ')'));    //->[object Object]


无论是变量定义还是函数定义都是如此,所以如下的代码会产生函数未定义的错误:
var s='function test(){return 1;}';     //一个函数定义语句
function demo2(){
    eval(s);
}
demo2();
alert(test());    //->error:test is not defined


可以同时兼容IE和Firefox,方法如下:
var X2={}    //my namespace:)
X2.Eval=function(code){
 if(!!(window.attachEvent && !window.opera)){
  //ie
  execScript(code); 
 }else{
  //not ie
  window.eval(code);
 }
}
        现在如果要想在函数内定义全局代码,就可以通过调用X2.Eval(code)方法,一个例子如下:
var s='global';
function demo3(){
 X2.Eval('var s="local"');
}
demo3();
alert(s); //->'local'


 
说明
该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。
如果试图覆盖 eval 属性或把 eval() 方法赋予另一个属性,并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常。


IE 当eval遇上function的处理


情况1:eval里没有function,直接执行: 
eval("alert('ss');");//所有浏览器正确均输出 
情况2:eval里有function,function立即执行: 
eval("(function(){alert('ss');})();");//所有浏览器正确输出 
情况3:eval里有function,使用变量保存function引用并调用该function: 
var f=eval("(function(){alert('ss');})"); 
f();//IE下报错:缺少对象 其他浏览器正常 
当在eval定义一个function并返回给变量时,IE报错:缺少对象。可见IE下eval里定义的function并不能成功返回到eval外部。
解决方法:使function对象作为一个执行结果返回:
方法1:
var f=eval("(function(){ return function(){alert('ss');}})()"); 
f();//所有浏览器正确输出 
eval里调用一个立即执行的函数,该函数执行之后返回一个function对象,此时该function对象的引用成功返回到外部变量。
方法2:
var f=eval("(false||function(){alert('ss');})"); 
f();//所有浏览器成功输出 
该方法也是jquery里使用的方法,function作为或表达式的执行结果返回,同样能成功解决问题。当然,表达式并不局限于上面的false||function(){},各种表达式只要能成功返回function,均可解决问题:
/* 与表达式:*/ 
var f=eval("(true&&function(){alert('ss');})"); 
f();//所有浏览器正常输出
/* 三元表达式:*/ 
var f=eval("(true?function(){alert('ss');}:'');"); 
f();//所有浏览器正常输出

最后

以上就是强健猫咪为你收集整理的javascript eval函数详细说明与兼容处理的全部内容,希望文章能够帮你解决javascript eval函数详细说明与兼容处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部