Javascript: поведение eval в IE8 - PullRequest
       6

Javascript: поведение eval в IE8

2 голосов
/ 26 августа 2011

Пожалуйста, рассмотрите пример на 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 возвращает объект function () в FF и Chrome, но возвращает неопределенный в IE8 :( В чем может быть проблема? Как получить одинаковое поведение во всех браузерах?

1 Ответ

4 голосов
/ 26 августа 2011

Если вы действительно хотите сделать это так, вы можете создать анонимную функцию, которая будет возвращать вам нужную функцию:

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

Редактировать : Или даже проще (необходимо только сделать так, чтобы браузер считал это выражением, а функция является результатом этого выражения, поэтому мы можем использовать оператор запятая ):

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

Но вы можете рассмотреть возможность использования конструктора функции , который принимает тело функции в виде строки.

...