json數(shù)組有長度json.abc.length,如果單純是json格式逮京,那么不能直接使用json.length方式獲取長度咬展,而應(yīng)該使用其他方法。
最近在修改一個(gè)html頁面的JS的時(shí)候遍歷JSON對(duì)象坝锰,卻怎么也調(diào)試不通過雹仿。怪這個(gè)HTML網(wǎng)頁不知道用了什么方法禁止了js錯(cuò)誤提示,剛開始的時(shí)候不知道有這個(gè)問題玄组,用chrome的開發(fā)人員工具都沒發(fā)現(xiàn)錯(cuò)誤滔驾,就是在獲取 json.length的時(shí)候總是undefined,所以就以為自己定義的json方法不對(duì)俄讹。折騰了一個(gè)晚上一點(diǎn)進(jìn)展都沒有哆致,頭都整暈了,太晚患膛,最后失望地洗洗睡了摊阀。
第二天晚上就是不甘心這個(gè)小問題能難倒我,于是靜下心來仔細(xì)查原因踪蹬。自己新建一個(gè)空的HTML文件在其中測試胞此,發(fā)現(xiàn)JSON對(duì)象根本沒有l(wèi)ength屬性,在搜索引擎查找也沒有比較權(quán)威的參考文檔提到j(luò)son有這個(gè)屬性跃捣。博客也很少有提到 json.length 的漱牵。但是奇怪的是我明明記得json有l(wèi)ength,我還用過疚漆,程序沒錯(cuò)酣胀,正確運(yùn)行。
那是怎么回事呢愿卸?最后看某博客一篇文章的時(shí)候回想起以前編程的細(xì)節(jié)灵临,記得以前的json的子對(duì)象是個(gè)數(shù)組而這次的不是,這下終于恍然大悟了趴荸。
以前我使用json的這樣的結(jié)構(gòu):
var json1={"abc":[{"name":"txt1"},{"name","txt2"}]};
遍歷的方法是:
for(var i=0;i<json1.abc.length;i++){alert(json1.abc[i].name);}
這里的json1.abc是一個(gè)數(shù)組,數(shù)組是由2個(gè)子json組成的宦焦,數(shù)組是有l(wèi)ength屬性的发钝,所以說能工作。
而我這一次的json是這樣的:
var json2={"name":"txt1","name2":"txt2"};
而json本身沒有l(wèi)ength屬性波闹,所以用length屬性自然會(huì)出錯(cuò):
for(var i=0;i<json2.length;i++){alert(json2[i].text);}
那么要遍歷這樣的json怎么辦呢酝豪?這樣做:
for(var js2 in json2){alert( js2+"="+json2[js2]);}
既然json沒有l(wèi)ength屬性,如果要知道他的長度怎么辦呢精堕?很簡單孵淘,把上面的遍歷改一下就是了:
var jslength=0;for(var js2 in json2){jslength++;}
把這段代碼寫成一個(gè)方法,以后調(diào)用就行了:
function getJsonLength(jsonData){
var jsonLength = 0;
for(var item in jsonData){
jsonLength++;
}
return jsonLength;}
學(xué)習(xí)計(jì)算機(jī)編程技術(shù)一定要嚴(yán)謹(jǐn)認(rèn)真歹篓,容不得半點(diǎn)馬虎瘫证,學(xué)習(xí)最重要是把基礎(chǔ)打牢揉阎,囫圇吞棗、不求甚解會(huì)給工作和學(xué)習(xí)帶來很多隱患背捌,效率上必須打折扣毙籽。寫下來以自勉!