1.foreach
方法没办法使用 break
语句跳出循环,或者使用return
从函数体内返回 ,可以利用抛出异常的方法终止循环,在foreach
中使用异步方法,无法保证同步执行,结果是并行的。
2.for...in
遍历数组索引、对象的属性使用for…in遍历时,原型链上的所有属性都将被访问
//数组
var arr = ["星期一","星期二","星期三"];
Array.prototype.something = ["放假","休息咯"];
for (var i in arr){ // i是下标(索引)
console.log(arr[i])
}
//对象
var obj = {guangzhou: '广州', shanghai: '上海', beijing: '北京'}
Object.prototype.something2={shenzhen:'深圳'}
for (var i in obj){
console.log(obj[i])
}
//数组
var arr = ["星期一","星期二","星期三"];
Array.prototype.something = ["放假","休息咯"];
for (var i in arr){
if(arr.hasOwnProperty(i)){
console.log(arr[i])
}
}
var arr = ["星期一","星期二","星期三"];
arr.test = 'testing';
for (var i in arr){ // i是下标(索引)
console.log(arr[i])
}
//星期一 星期二 星期三 testing
小建议:不使用 for-in 来遍历数组,除非你知道这个数组对象中没有这样的属性
3.for...of
遍历数组的值,并不能循环一个普通对象,可以借助Object.keys()
和Object.values()
来遍历对象。
//数组
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
//不能遍历一个普通的对象,可以通过 内建Object.keys() 方法让 for..of 也支持
//按对象所拥有的属性值进行循环,可使用内置的Object.values()方法
for...of
的正常使用:
//for-of 遍历 Set
var uniqueWords = new Set(words);
for (var word of uniqueWords) {
console.log(word);
}
//for-of 遍历 Map,Map是键值对组成,需要用到 Es6新特性解构
for (var [key, value] of phoneBookMap) {
console.log(key + "'s phone number is: " + value);
}
//for-of 遍历原生对象
// 输出对象自身可以枚举的值
for (var key of Object.keys(someObject)) {
console.log(key + ": " + someObject[key]);
}
4.数组中存在空项
array = ['a', , 'c'];
for (let index = 0; index < array.length; index++) {
const element = array[index]
console.log(element) // 没有跳过空值
}
//a undefined c
array = ['a', , 'c'];
array.forEach(element => {
console.log(element) // 跳过空值
})
//a c
array = ['a', , 'c'];
for (const key in array) {
console.log(array[key]) // 跳过空值
}
//a c
array = ['a', , 'c'];
for (const iterator of array) {
console.log(iterator) // 没有跳过空值
}
//a undefined c
小建议:推荐使用for...of
保存数组中的空项为undefined
网友评论