2011-08-26 47 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它將函數體作爲一個字符串。