1. 程式人生 > >JS對JSON對象遍歷輸出的時候真的是按照順序輸出嗎?

JS對JSON對象遍歷輸出的時候真的是按照順序輸出嗎?

什麽 並不是 mar *** 1.8 push div auto code

  對象的遍歷輸出並不是按照對象屬性定義順序來的,那麽是按照什麽規則來的呢,仔細深入研究你會發現,這還跟瀏覽器有關系,Chrome跟IE是不一樣的,所以給出以下結論:

  Chrome Opera 的 JavaScript 解析引擎遵循的是新版 ECMA-262 第五版規範。因此,使用 for-in 語句遍歷對象屬性時遍歷書序並非屬性構建順序。而 IE6 IE7 IE8 Firefox Safari 的 JavaScript 解析引擎遵循的是較老的 ECMA-262 第三版規範,屬性遍歷順序由屬性構建的順序決定。

  Chrome Opera 中使用 for-in 語句遍歷對象屬性時會遵循一個規律:
它們會先提取所有 key 的 parseFloat 值為非負整數的屬性,然後根據數字順序對屬性排序首先遍歷出來,然後按照對象定義的順序遍歷余下的所有屬性。

那麽,解決辦法呢?

可以把對象通過Object.keys提取對象的key出來變成數組,然後通過數組的排序,然後遍歷數組,通過key去取對象的屬性值。

  有一些業務要求對對象的各屬性值按照一定順序排列,而給定的對象屬性又不確定能按順序排列(如,數字大小順序)

//************************* JSON對象屬性排序*********************************//
//要求傳入參數 JsonData 為JSON對象
//輸出結果為JSON對象
//輸出的對象為按key值升序排列的
function JsonObjSort(JsonData) { if(JsonData) {
var JsonKeyArray=new Array(); for(x in JsonData) { var xToInt=parseInt(x); JsonKeyArray.push(xToInt); } JsonKeyArray=JsonKeyArray.sort();//對數組升序排列 var NewJsonStr="" ; for(var i=0;i<JsonKeyArray.length;i++) {
if(i>0) { NewJsonStr += ‘,‘; } var value = JsonData[JsonKeyArray[i]]; NewJsonStr += ‘"‘+JsonKeyArray[i]+ ‘"‘ +‘:‘+value; } var NewJsonStrObj=eval(‘(‘+‘{‘+NewJsonStr+‘}‘+‘)‘); //console.log(NewJsonStrObj); return NewJsonStrObj ; } else return ""; }

JS對JSON對象遍歷輸出的時候真的是按照順序輸出嗎?