2011-08-26 25 views
2

EVAL行为请考虑在http://jsfiddle.net/KE8Mv/的Javascript:在IE8

HTML的例子

<input type='text' id="log" /> 

的JavaScript

var f = function(){ 
    if(console && console.log) 
     console.log('hello eval issue!'); 
}.toString(); 

var f1 = eval('('+f+')'); 

var logMsg = f1===undefined?'eval returns none':'eval returns function'; 

$('#log').val(logMsg); 

中的eval调用返回()的函数对象在FF和Chrome,但回报在IE8中未定义:( )可能是什么问题?如何在所有浏览器中获得相同的行为?

+0

感谢逗号运算符在任何地方都能正常工作。 – sovo2014

回答

4

如果你真的想这样做,这样,你可以创建一个匿名函数将返回你所需要的功能:

var f1 = eval("(function() {return " + f + ";})()"); 

编辑:或者更简单(只需要对让浏览器认为这与功能在于表达的结果的表达式,所以我们可以使用comma operator):

var f1 = eval("0, " + f); 

但你可能要考虑使用Function constructor它将函数体作为一个字符串。