- for:遍歷數(shù)組
//對象數(shù)組
var arr = [ {Monday: '星期一', Tuesday: '星期二', Wednesday: '星期三'} ]
for (var i=0; i<arr.length;i++){ // i是下標(biāo)(索引)
console.log(i)
console.log(arr[i])
}
結(jié)果:0
{Monday: '星期一', Tuesday: '星期二', Wednesday: '星期三'}
//數(shù)組
var arr = ["星期一","星期二","星期三"]
for (var j=0; j<arr.length;j++){// j是下標(biāo)(索引)
console.log(j)
console.log(arr[j])
}
結(jié)果:
0
星期一
1
星期二
2
星期三
- forEach:遍歷數(shù)組拓提,但不能使用break、continue和return語句
//對象數(shù)組
var arr = [
{guangzhou: '廣州', shanghai: '上海', beijing: '北京'},
{Monday: '星期一', Tuesday: '星期二', Wednesday: '星期三'}
]
arr.forEach(function(value,index){ //第一個參數(shù)是值隧膘,第二個參數(shù)是下標(biāo)(索引)
console.log(value)
console.log(index)
})
結(jié)果:{guangzhou: '廣州', shanghai: '上海', beijing: '北京'},
0
{Monday: '星期一', Tuesday: '星期二', Wednesday: '星期三'}
1
//數(shù)組
var arr = ["星期一","星期二","星期三"];
arr.forEach(function(value,index){//第一個參數(shù)是值代态,第二個參數(shù)是下標(biāo)(索引)
console.log(value)
console.log(index)
})
結(jié)果:
星期一
0
星期二
1
星期三
2
for…in:遍歷數(shù)組索引、對象的屬性
使用for…in遍歷時疹吃,原型鏈上的所有屬性都將被訪問
例如:
//數(shù)組
var arr = ["星期一","星期二","星期三"];
Array.prototype.something = ["放假","休息咯"];
for (var i in arr){ // i是下標(biāo)(索引)
console.log(arr[i])
}
結(jié)果:
星期一
星期二
星期三
["放假","休息咯"]
如果把該例子的數(shù)組蹦疑,寫成像上面的對象數(shù)組,效果與數(shù)組也是一樣的萨驶,就不再次用對象數(shù)組來測試了歉摧。
//對象
var obj = {guangzhou: '廣州', shanghai: '上海', beijing: '北京'}
Object.prototype.something2={shenzhen:'深圳'}
for (var i in obj){
console.log(obj[i])
}
結(jié)果:廣州
上海
北京
{shenzhen:“深圳”}
解決方法:使用hasOwnProperty()
hasOwnProperty()方法可以檢測一個屬性是存在于實例中,還是存在于原型中腔呜。這個方法只在給定屬性存在于對象實例中時叁温,才會返回true。
//數(shù)組
var arr = ["星期一","星期二","星期三"];
Array.prototype.something = ["放假","休息咯"];
for (var i in arr){
if(arr.hasOwnProperty(i)){
console.log(arr[i])
}
}
結(jié)果:星期一
星期二
星期三
//對象
var obj = {guangzhou: '廣州', shanghai: '上海', beijing: '北京'}
Object.prototype.something2={shenzhen:'深圳'}
for (var i in obj){
if(obj.hasOwnProperty(i)){
console.log(obj[i])
}
}
結(jié)果:廣州
上海
北京
for…of:遍歷數(shù)組的值
//數(shù)組
var arr = ["星期一","星期二","星期三"];
for (var i of arr){ //i是值
console.log(i)
}
//對象
var obj = {guangzhou: '廣州', shanghai: '上海', beijing: '北京'}
for (var i of obj){ //i是值
console.log(i)
}
//對象會報錯:Uncaught TypeError: obj is not iterable
//不能遍歷一個普通的對象核畴,可以通過 內(nèi)建Object.keys() 方法讓 for..of 也支持
//我也還沒有試過膝但,這里就先不測試了,之后再研究下
結(jié)果:星期一
星期二
星期三
obj對象的結(jié)果:報錯谤草,obj is not iterable
總結(jié):
for(最原始的寫法)跟束、 forEach(ES5,但是它不支持使用break咖刃、continue和return語句)、for…of(ES6憾筏,循環(huán)數(shù)組的元素值)這三個是循環(huán)數(shù)組(對象數(shù)組)的嚎杨;
for…in循環(huán)數(shù)組索引、對象的屬性氧腰,但使用 for…in 原型鏈上的所有屬性都將被訪問枫浙,用 hasOwnProperty() 方法解決。