我遇到了以下脚本,并且不了解第一行。它显然要么返回JSON.stringify或匿名函数。最好是这样做,还是使用传统的function printObj(obj)
?此外,JSON在哪里定义?感谢
var printObj = typeof JSON != "undefined" ? JSON.stringify : function(obj) {
var arr = [];
$.each(obj, function(key, val) {
var next = key + ": ";
next += $.isPlainObject(val) ? printObj(val) : val;
arr.push( next );
});
return "{ " + arr.join(", ") + " }";
};
$("#log").append( printObj(object1) );
答案 0 :(得分:2)
var printObj = // setting the variable printObj
typeof JSON != 'undefined' // if this is true then set printObj to
? JSON.stringify // <- ...this function
: function( obj ) {
// otherwise let's build it ourselves...
};
无论标识符typeof JSON != 'undefined'
是否已定义, JSON
都将返回true或false。如果尚未定义typeof x
,x
将不会导致引用错误。
答案 1 :(得分:1)
JSON已经是javascript中存在的一个函数。 (它最有可能使用stringify
和parse
)
第一行,只确保stringify存在一个函数,如果没有,则将对象传递给一个函数函数,该函数试图解析JSON对象并将其作为JSON字符串返回。
(我相信你正在使用的函数“hack”用于修复IE8 compatibility issue,其中IE8没有JSON对象。你可以避免使用它如果您在页面中设置了以下内容:
<meta http-equiv="X-UA-Compatible" content="IE=8" />
此外,第一行分配的结构使用了一个名为ternary operator assignment的东西。
例如:
var t = 1 == 1 ? 1 : 0;
答案 2 :(得分:1)
JSON是由某些Web浏览器自动定义的变量,如FireFox和Chrome。 IE的旧版本没有定义JSON,很多讨厌的用户仍然拥有这些版本,这就是为什么在这种情况下手动定义的原因。
我认为最好的解决方案是添加对json库的引用。可在此处找到:http://www.json.org/js.html
答案 3 :(得分:1)
它定义了一个始终可以使用的printObj
函数:
请注意
{...}
)答案 4 :(得分:1)
“我遇到了以下脚本,并且不理解第一行。显然要么返回JSON.stringify,要么返回匿名函数。”
似乎你做了解第一行。
“最好是这样做,还是使用传统的
function printObj(obj)
?”
简单地定义函数将产生不同的结果,因为原始JSON.stringify
将被忽略,并且应优先于垫片。
问题中给出的替代方案不是一个完整的垫片,即使它是,本机肯定会表现得更好。
“此外,JSON在哪里定义?”
默认情况下,它在ECMAScript 5环境中定义。
答案 5 :(得分:1)
使用此语法,您可以在检查是否存在合适的内置方法的同时创建函数。 JSON是一些现代浏览器内置于引擎中的对象,很像Window或Location。较旧的浏览器不具有JSON,因此将返回undefined,并允许使用自定义匿名函数。