for.. in 与for..of循环 遍历

1. for...in语句以任意顺序遍历一个对象的除Symbol以外的可枚举属性。

//遍历数组
let arr = [1,2,3,4];
for (let key in arr) {
    console.log(arr[key])    //1,2,3,4
}

let arr1 = [[1,2,3,4],{name:'A',age:'18',sex:'女'}];
for (let key in arr1) {
    console.log(arr1[key])     // [1,2,3,4],{name:'A',age:'18',sex:'女'}
}


//遍历object
let obj = {0:1,1:2,2:3,3:4};
for (let key in obj) {
    console.log(obj[key])    //1,2,3,4
}

let obj1 = {name:'A',age:'18',sex:'女'};
for (let key in obj1) {
    console.log(obj1[key])    //A,18,女
}

let obj2 = {1:[1,2,3,4],2:{name:'A',age:'18',sex:'女'}};
for (let key in obj2) {
    console.log(obj2[key])    // [1,2,3,4],{name:'A',age:'18',sex:'女'}
}

//与return,break,continue搭配
let obj3 = {name:'A',age:'18',sex:'女'};
for (let key in obj3) {
    if(key==='age'){
        return
    }
    console.log(obj3[key])    //报错 Uncaught SyntaxError: Illegal return statement
}


function test(){
	let obj3 = {name:'A',age:'18',sex:'女'};
    for (let key in obj3) {
        if(key==='age'){
            return
        }
        console.log(obj3[key])
    }

}
test();   //A


let obj4 = {name:'A',age:'18',sex:'女'};
for (let key in obj4) {
    if(key==='age'){
        break
    }
    console.log(obj4[key])    //A
}

let obj5 = {name:'A',age:'18',sex:'女'};
for (let key in obj5) {
    if(key==='age'){
       continue
    }
    console.log(obj5[key])    //A,女
}

  * 为什么一般不使用for...in遍历数组?

2.for...of语句在可迭代对象(包括 ArrayMapSetStringTypedArrayarguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句

参考实例: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of

//遍历数组
let arr = [1,2,3,4];
for (let val of arr) {
    console.log(val)    //1,2,3,4
}

let arr1 = [{name:'A'},{age:'18'},{sex:'女'}];
for (let val of arr1) {
    console.log(val)    //{name:'A'},{age:'18'},{sex:'女'}
}


//与return,break,continue搭配
let arr = [1,2,3,4];
for (let val of arr) {
    if(val===3){
        return
    }
    console.log(val)    //报错 Uncaught SyntaxError: Illegal return statement
}

function test(){
	let arr = [1,2,3,4];
	for (let val of arr) {
		if(val===3){
			return
		}
		console.log(val)    
	}
}
test(); //1,2

let arr = [1,2,3,4];
for (let val of arr) {
    if(val===3){
        break
    }
    console.log(val)    //1,2
}

let arr = [1,2,3,4];
for (let val of arr) {
    if(val===3){
        continue
    }
    console.log(val)    //1,2,4
}



let arr = [1,2,3,4];
for (let index of arr.keys()) {
    console.log(index)    //0,1,2,3
}

let arr = [1,2,3,4];
for (let val of arr.values()) {
    console.log(val)    //1,2,3,4
}


//如果不使用for...of循环,可以手动调用迭代器对象的next方法,进行遍历。
let arr = [1,2,3,4];
for (let [index,val] of arr.entries()) {
    console.log(index)    //0,1,2,3
    console.log(val)    //1,2,3,4
}

let letter = ['a', 'b', 'c'];
let entries = letter.entries();
console.log(entries.next().value); // [0, 'a']
console.log(entries.next().value); // [1, 'b']
console.log(entries.next().value); // [2, 'c']


let letter = ['a', 'b', 'c'];
let entries = letter.entries();
console.log(entries.next()); // {done: false, [0, 'a']}
console.log(entries.next()); // {done: false, [1, 'b']}
console.log(entries.next()); // {done: false, [2, 'c']}
console.log(entries.next()); // {done: true, undefined}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值