javascript – 无法理解jQuery.parseJSON JSON.parse回退

前端之家收集整理的这篇文章主要介绍了javascript – 无法理解jQuery.parseJSON JSON.parse回退前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

这是source of $.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 + ')')

我想知道这些事情

>这个解析后备如何工作?
>为什么eval不用于后备? (它不比新的Function()快)

最佳答案
new Function()允许您将函数作为字符串传递.

在这种情况下,创建函数以简单地返回由json字符串描述的对象.由于json是有效的对象文字,因此该函数只返回json中定义的对象.立即调用函数,返回该对象.

性能而言,一些快速的谷歌搜索发现声称新的Function()比eval更快,尽管我自己没有测试过.

原文链接:https://www.f2er.com/jquery/427977.html

猜你在找的jQuery相关文章