typeof扩展教程,困惑,请帮我理解

时间:2014-09-20 22:13:19

标签: jquery html json

拜托,我在消化一些代码块时遇到了麻烦,如果有人可以帮我一行,我真的很感激,因为我真的很困惑。我没有其他人问!!!!!

以下是代码细分:

<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

1 个答案:

答案 0 :(得分:1)

差不多,是的,JSON将永远存在 - 至少现在如此。但它不是一个关键字 - 它是JavaScript中的内置对象,与数字和字符串相同。

您可以在MDN看到旧浏览器不支持它,例如IE7,Safari 3.所以要么它是一段旧代码,要么它试图支持旧浏览器。

printObj的意思是它存储对函数的引用,该函数接受一个对象并以JSON格式返回一个字符串。因此,代码说明对象JSON是否存在,然后在JSON.stringify中存储对printObj的引用。否则存储对其中的函数的引用。

这意味着当您再拨打printObj(object1)时,您实际上是在呼叫JSON.stringify(object1)