拜托,我在消化一些代码块时遇到了麻烦,如果有人可以帮我一行,我真的很感激,因为我真的很困惑。我没有其他人问!!!!!
以下是代码细分:
<div id="log"></div> <!-- This is just a container div for the result -->
<script>
//Declare first object, object literal notation:
var object1 = {
apple: 0,
banana: { weight: 52, price: 100 },
cherry: 97
};
//Declare Second object, object literal notation:
var object2 = {
banana: { price: 200 },
durian: 100
};
// Merge object2 into object1
$.extend( object1, object2 );
//This is were I am confused, why test for **typeof JSON**?
//Won't it always return "object"? My understanding is that JSON here is just a keyword,
//so typeof JSON will always return object, so of what use is it?
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( ", " ) + " }";
};
//Here they called printObj as a function passing object1, but how is **object 1** being used,
//when the first statement in printObj is typef JSON?
$( "#log" ).append( printObj( object1 ));
</script>
所以从本质上讲,我无法理解条件 typeof JSON 是如何使用的,因为它总是返回&#34; object&#34;。此外,我无法理解调用 printObj(object1)以及参数 object1 如何与 printObj 匹配,当第一个事情是 typeof JSON 。
答案 0 :(得分:1)
差不多,是的,JSON
将永远存在 - 至少现在如此。但它不是一个关键字 - 它是JavaScript中的内置对象,与数字和字符串相同。
您可以在MDN看到旧浏览器不支持它,例如IE7,Safari 3.所以要么它是一段旧代码,要么它试图支持旧浏览器。
printObj
的意思是它存储对函数的引用,该函数接受一个对象并以JSON格式返回一个字符串。因此,代码说明对象JSON
是否存在,然后在JSON.stringify
中存储对printObj
的引用。否则存储对其中的函数的引用。
这意味着当您再拨打printObj(object1)
时,您实际上是在呼叫JSON.stringify(object1)
。