for ... in
for
循環(huán)的一個(gè)變體是for ... in
循環(huán)们陆,它可以把一個(gè)對(duì)象的所有屬性依次循環(huán)出來(lái):
var o = { name: 'Jack', age: 20, city: 'Beijing'};for (var key in o) { alert(key); // 'name', 'age', 'city'}
要過(guò)濾掉對(duì)象繼承的屬性,用hasOwnProperty()來(lái)實(shí)現(xiàn):
var o = { name: 'Jack', age: 20, city: 'Beijing'};for (var key in o) { if (o.hasOwnProperty(key)) { alert(key); // 'name', 'age', 'city' }}
由于Array
也是對(duì)象安吁,而它的每個(gè)元素的索引被視為對(duì)象的屬性砌左,因此狰腌,for ... in
循環(huán)可以直接循環(huán)出Array
的索引:
var a = ['A', 'B', 'C'];for (var i in a) { alert(i); // '0', '1', '2' alert(a[i]); // 'A', 'B', 'C'}
請(qǐng)注意,for ... in
對(duì)Array
的循環(huán)得到的是String
而不是Number
虐呻。
do ... while
最后一種循環(huán)是do { ... } while()
循環(huán)象泵,它和while
循環(huán)的唯一區(qū)別在于,不是在每次循環(huán)開(kāi)始的時(shí)候判斷條件斟叼,而是在每次循環(huán)完成的時(shí)候判斷條件:
用do { ... } while()
循環(huán)要小心偶惠,循環(huán)體會(huì)至少執(zhí)行1次,而for
和while
循環(huán)則可能一次都不執(zhí)行朗涩。