2012-10-28 99 views
0

我遇到以下腳本,並且不理解第一行。它顯然或者返回JSON.stringify或者一個匿名函數。最好這樣做,還是使用傳統的function printObj(obj)?另外,JSON在哪裏定義?謝謝創建javascript函數的其他方法

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

所有好的答案。大衛與我打的最多,但可能是因爲我先讀了其他人。謝謝 – user1032531

+0

另外,爲什麼我原來的問題降價。如果有些事情我不該做,請讓我知道。謝謝 – user1032531

+0

可能是因爲你的標題實際上是模糊的和/或錯誤的,你實際上在問什麼。這只是有點不清楚。 (我沒有downvote) – Layke

回答

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'將返回true或false標識符JSON是否已被定義。如果x尚未定義,則typeof x不會導致參考錯誤。

1

JSON已經是存在於JavaScript中的函數。 (它有你最有可能使用的stringifyparse

第一行只是確保stringify存在一個函數,如果它沒有,那麼它將該對象傳遞給試圖解析的函數函數JSON對象並將其作爲JSON字符串返回。

(我相信功能「黑客」所使用,是爲了解決一個IE8 compatibility issue,其中IE8沒有一個JSON對象,你可以要避免使用完全如果您在頁面設置:

<meta http-equiv="X-UA-Compatible" content="IE=8" />

同樣,第一線路分配的結構,採用一種叫做ternary operator assignment

,例如:

var t = 1 == 1 ? 1 : 0; 
1

JSON是由一些Web瀏覽器(如FireFox和Chrome)自動定義的變量。 IE的舊版本沒有定義JSON,許多煩人的用戶仍然有這些版本,這就是爲什麼在這種情況下手動定義它的原因。

我認爲最好的解決方案,就是添加一個對json庫的引用。可以在這裏找到:http://www.json.org/js.html

1

它定義了一個printObj功能,可以一直使用:

  • 如果JSON.stringify定義,printObj是這個函數
  • 如果JSON.stringify不可用,新的功能用於

注意

1

「我碰到下面的腳本來了,並不理解第一行。它顯然或者返回JSON.stringify或者一個匿名函數。

看來你瞭解第一線。

」是最好的做這種方式,還是採用傳統的function printObj(obj)

簡單地定義功能都會有不同的結果,因爲本地JSON.stringify將被忽略,並且應該優於墊片。

在這個問題給出的備選不是一個完整的墊片,即使它是,本機將肯定有更好的表現。

「此外,哪裏JSON得到界定?」

默認情況下,它在ECMAScript 5環境中定義。

1

使用此語法,您可以在檢查合適的內置方法的同時創建函數。 JSON是一些現代瀏覽器已經構建到引擎中的對象,非常像窗口或位置。舊的瀏覽器不會有JSON,因此會返回未定義的,並允許使用自定義匿名函數。

相關問題