`
279828322
  • 浏览: 3603 次
文章分类
社区版块
存档分类
最新评论

js的eval执行和字符串转函数

阅读更多

var applyFUN=function (f,p){
return f(p);
};

var fun=eval("(true&&"+funstr+")");//funstr函数体的字符串转函数

applyFUN(fun,p);//可以执行带参的函数


在IE下,当eval遇上function,IE下会出现怪异情况,我们用例子一步步说明

详细出处参考:http://www.jb51.net/article/27969.htm
情况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();//所有浏览器正常输出
详细出处参考:http://www.jb51.net/article/27969.htm
分享到:
评论

相关推荐

    js eval函数使用,js对象和字符串互转实例.docx

    ### JavaScript中的`eval()`函数与对象字符串互转详解 #### 一、`eval()`函数概述 在JavaScript中,`eval()`函数是一个强大的工具,它能够将字符串形式的JavaScript代码解析并执行。这使得动态生成和执行代码成为...

    javascript实现根据函数名称字符串动态执行函数的方法示例

    eval()函数可以执行字符串中的JavaScript代码,如果我们知道要调用的函数名的字符串,可以将其与括号“()”组合起来形成代码字符串,并用eval()函数执行。示例代码如下: ```javascript function targetFunction() {...

    js eval函数使用,js对象和字符串互转实例

    JavaScript中的`eval()`函数是一个非常强大但又颇具争议的工具,它可以将字符串解析为JavaScript代码并执行。在本文中,我们将深入探讨`eval()`的工作原理,以及如何在JavaScript中进行对象与字符串之间的转换。 ...

    js中eval()函数和trim()去掉字符串左右空格应用.docx

    在JavaScript中,`eval()`函数是一种特殊的内置函数,它的主要功能是将传递给它的字符串参数作为JavaScript代码进行解析并执行。`eval()`函数非常强大且灵活,但也存在一些潜在的安全风险和性能问题。 **1.1 基本...

    eval函数的一些用法

    在JavaScript引擎内部,`eval`的实现相当复杂,涉及词法分析、语法解析、编译和执行等多个阶段。由于JavaScript引擎的具体实现细节通常涉及大量底层代码,这里仅简单概述:`eval`的代码会被编译成中间表示(如字节码...

    c#动态执行字符串事例

    `CodeDom`提供了一种编译和执行字符串代码的方法,而无需直接使用`eval`函数,如JavaScript中常见的情况。`C#`并没有内置的`eval`函数,但通过`CodeDom`可以实现类似的功能。 `CodeDom`(代码对象模型)是一组类,...

    js把字符串转换成变量

    `eval()` 是JavaScript的一个全局函数,它可以将一个字符串作为代码执行。这意味着如果你有一个包含变量名的字符串,`eval()` 可以创建或访问那个变量。例如: ```javascript var str = "myVariable"; eval(...

    javascript中eval解析JSON字符串.docx

    `eval()`函数在JavaScript中是一个内置函数,它接受一个字符串参数,并尝试将其作为JavaScript代码执行。如果参数是一个表达式,则计算该表达式的值;如果是一个或多个声明,则执行这些声明。 #### 三、使用eval()...

    javascript执行eval函数时利用正则表达式去掉回车符换行符和注释

    JavaScript中的`eval()`函数是一个非常强大的工具,它能够将字符串作为JavaScript代码来执行。然而,直接使用`eval()`可能存在安全风险,比如代码注入攻击。在某些特定场景下,我们需要对输入的字符串进行预处理,...

    js 自定义trim去除字符串左右杂质

    js 自定义trim去除字符串左右杂质 在 Java 中,String 类型提供了 trim() 方法来去除字符串左右的空格。然而,在 JavaScript 中,并没有提供类似的方法来去除字符串左右的杂质。因此,我们需要自定义 trim() 方法来...

    字符串转公式,输入公式的字符串形式,可以输出结果。

    8. **库和框架**:许多编程语言提供现成的库或框架来帮助实现字符串转公式,如Python的`eval`函数、JavaScript的`new Function`或者Java的`ScriptEngine`接口。这些工具简化了开发过程,但同时也需要注意上述的安全...

    把字符串变成可执行代码

    总的来说,“字符串变为可执行代码”涉及多种编程语言的特性和技巧,包括但不限于Python的`exec`和`eval`,JavaScript的`eval`,Java的ScriptEngine,以及C#的Roslyn编译器API。在实际应用中,要谨慎处理动态执行的...

    javascript 自定义eval函数实现

    JavaScript中的`eval()`函数是一个非常强大但又颇具争议的功能,它允许执行一个字符串作为JavaScript代码。在本讨论中,我们将深入探讨如何自定义`eval()`函数以提高代码的安全性和效率,同时也会涉及到JavaScript的...

    javascript中eval解析JSON字符串

    在JavaScript编程中,eval函数是一个非常强大的内置函数,它能够将字符串作为JavaScript代码执行。虽然eval函数非常强大,但同时它也存在安全风险和潜在的性能问题。由于eval可以执行任何JavaScript代码,因此如果...

    把字符串转化为表达式

    这些库提供了构建和执行表达式树的能力,能够对字符串表达式进行编译和安全执行,同时提供了更丰富的数学函数支持。 总的来说,通过`Interop.MSScriptControl.dll`库,C#开发者可以方便地将字符串转换为可执行的...

    java实现eval函数

    在Java编程语言中,`eval`函数通常与JavaScript关联,因为JavaScript有一个内置的`eval`函数,它能够解析并执行一个字符串作为JavaScript代码。然而,Java本身并不直接提供类似的功能。`eval`函数在Java中并不是标准...

    Javascript中eval函数的用法

    JavaScript 中的 eval 函数是一个非常强大且灵活的函数,可以将一个字符串当作一个 JavaScript 表达式来执行。正如我们在上面的描述中所看到的,eval 函数可以将一个字符串解释成 JavaScript 代码,然后执行它。这...

    json字符串和js对象之间的转换

    `eval()` 是JavaScript中的一个全局函数,它可以执行一个字符串作为JavaScript代码。尽管`eval()` 可以解析JSON字符串并将其转化为JavaScript对象,但由于安全性和性能问题,不推荐使用。示例: ```javascript var ...

Global site tag (gtag.js) - Google Analytics