json數組有長度json.abc.length,如果單純是json格式,那么不能直接使用json.length方式獲取長度,而應該使用其他方法。
最近在修改一個html頁面的JS的時候遍歷JSON對象,卻怎么也調試不通過。怪這個HTML網頁不知道用了什么方法禁止了js錯誤提示,剛開始的時候不知道有這個問題,用chrome的開發人員工具都沒發現錯誤,就是在獲取 json.length的時候總是undefined,所以就以為自己定義的json方法不對。折騰了一個晚上一點進展都沒有,頭都整暈了,太晚,最后失望地洗洗睡了。
第二天晚上就是不甘心這個小問題能難倒我,於是靜下心來仔細查原因。自己新建一個空的HTML文件在其中測試,發現JSON對象根本沒有length屬性,在搜索引擎查找也沒有比較權威的參考文檔提到json有這個屬性。博客也很少有提到 json.length 的。但是奇怪的是我明明記得json有length,我還用過,程序沒錯,正確運行。
那是怎么回事呢?最后看某博客一篇文章的時候回想起以前編程的細節,記得以前的json的子對象是個數組而這次的不是,這下終於恍然大悟了。
以前我使用json的這樣的結構:
var json1={"abc":[{"name":"txt1"},{"name","txt2"}]};
遍歷的方法是:
for(var i=0;i<json1.abc.length;i++){alert(json1.abc[i].name);}
這里的json1.abc是一個數組,數組是由2個子json組成的,數組是有length屬性的,所以說能工作。
而我這一次的json是這樣的:
var json2={"name":"txt1","name2":"txt2"};
而json本身沒有length屬性,所以用length屬性自然會出錯:
for(var i=0;i<json2.length;i++){alert(json2[i].text);}
那么要遍歷這樣的json怎么辦呢?這樣做:
for(var js2 in json2){ alert( js2+"="+json2[js2]); }
既然json沒有length屬性,如果要知道他的長度怎么辦呢?很簡單,把上面的遍歷改一下就是了:
var jslength=0; for(var js2 in json2){ jslength++; }
把這段代碼寫成一個方法,以后調用就行了:
function getJsonLength(jsonData){ var jsonLength = 0; for(var item in jsonData){ jsonLength++; } return jsonLength; }
學習計算機編程技術一定要嚴謹認真,容不得半點馬虎,學習最重要是把基礎打牢,囫圇吞棗、不求甚解會給工作和學習帶來很多隱患,效率上必須打折扣。留下來以自勉!
原文鏈接:前端開發博客 (http://caibaojian.com/json-length.html)