沒有介紹正文之前先給大家說下json是什麼。
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,我們稱之為JavaScript對象表示法。使用JSON進行數據傳輸的優勢之一是JSON實際上就是JavaScript。它基於ECMAScript第3版中JavaScript對象字面量語法子集的一種文本格式。這表示可以使用responseText從服務器中檢索JSON數據,然後再使用JavaScript的eval()方法將JSON字符串轉換成JavaScript對象,那麼,使用附加JavaScript就可以很地從該對象中提取數據,而不需要處理DOM。
我們在做項目的時候經常會用到javascript的json。
首先說一下javascript的json串是什麼,json串屬於javascript的一個對象,有鍵和值對應的對象。
一般的格式是:
a = { a1 : 1, a2 : 'abc', a3 : 'abc', a4 : [1,2,3], a5 : function(){console.log(12)} };
我們讀取這個json 的方法是通過for in 循環來遍歷;
使用json串的好處是可以事先把數據庫中的數據一次性的讀取出來存成json的形式,然後通過javascript來讀取裡邊的屬於,這樣可以大大減少對服務器的請求次數,增加了前台頁面的加載效率 。
我們在遍歷json的時候會遇到許多問題,我今天遇到的問題是在我們把json串的鍵值寫成數字的情況下,在主流浏覽器遍歷的時候不會按照我們輸出的json的結構先後輸出,而是按照數字的從小到大順序輸出。但是ie8以下浏覽器會按照我們輸出的順序輸出。
例如:
a = { '1' : 1, '5' : function(){console.log(12)}, '2' : 'abc', '4' : [1,2,3], '3' : {'5' : 'abc', '6' : 'bcd'}, };
通過for in循環
for(var i in a){ console.log(a[i]); }
chrome,firefox等浏覽器輸出:1,abc,Object { 5="abc", 6="bcd"},[1, 2, 3],function();
ie8以及以下浏覽器:1,function(),abc,[1, 2, 3],Object { 5="abc", 6="bcd"};
解決這樣的問題有兩種:
第一:就是把數字的鍵值改成字符串形式的包括字母或者下劃線;
第二 :就是解決ie的兼容性,通過先遍歷json然後把鍵值存入一個數組中,然後再通過數組排序來循環數組取json中的數據。
具體代碼:
var arr = [],sortNumber = function (a,b){ return a - b; }; for(var i in a){ arr[arr.length] = a[i]; arr.sort(sortNumber); for(var x = 0; x < arr.length; x++) { console.log(a[arr[x]]); }
浏覽器讀取的數據就會保持一致了,有個缺點就是這個也不會按照我們輸出的json格式輸出,只是解決了浏覽器的兼容問題。
以上所述是小編給大家介紹的JavaScript遍歷Json串浏覽器輸出的結果不統一問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對網站的支持!