Проблемы с пониманием jQuery.parseJSON JSON.parse fallback

Это источник $. ParseJSON

function (data) {
    if (typeof data !== "string" || !data) {
        return null;
    }

    // Make sure leading/trailing whitespace is removed (IE can't handle it)
    data = jQuery.trim(data);

    // Attempt to parse using the native JSON parser first
    if (window.JSON && window.JSON.parse) {
        return window.JSON.parse(data);
    }

    // Make sure the incoming data is actual JSON
    // Logic borrowed from http://json.org/json2.js
    if (rvalidchars.test(data.replace(rvalidescape, "@").replace(rvalidtokens, "]").replace(rvalidbraces, ""))) {

        return (new Function("return " + data))();

    }
    jQuery.error("Invalid JSON: " + data);
}

У меня проблемы с пониманием следующих резервных вариантов

return (new Function("return " + data))();

а также (этого нет в jQuery)

return (eval('('+ data + ')')

Я хотел бы знать эти вещи

  1. Как на самом деле работает этот резервный вариант синтаксического анализа?
  2. Почему eval не используется в резервном варианте? (Он не быстрее, чем ] new Function () )

5
задан naveen 9 August 2011 в 13:10
поделиться