Javascript:IE8中的eval行为

时间:2011-08-26 07:43:55

标签: javascript internet-explorer-8 eval

请考虑http://jsfiddle.net/KE8Mv/

上的示例

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中的function()对象,但在IE8中返回undefined :( 可能是什么问题?如何在所有浏览器中获得相同的行为?

1 个答案:

答案 0 :(得分:4)

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

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

编辑:甚至更简单(只需要让浏览器认为这是一个表达式,函数是该表达式的结果,所以我们可以使用comma operator):

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

但您可能需要考虑使用将函数体作为字符串的Function constructor