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 + ')')
我想知道这些事情
new Function()
)答案 0 :(得分:4)
new Function()
允许您将函数作为字符串传递。
在这种情况下,创建函数以简单地返回json字符串描述的对象。由于json是有效的对象文字,因此该函数只返回json中定义的对象。立即调用新函数,返回该对象。
就性能而言,一些快速谷歌搜索发现声称new Function()
比eval
快,但我自己没有测试过。