JS 的循环
Posted on Wed, 25 Dec 2024 16:16:46 +0800 by LiangMingJian
JS 的循环
for of 和 for in
- for in :以任意顺序遍历一个对象的除 Symbol 以外的可枚举属性。
- for of :在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句。
for in 与 for of 的区别在于它们的迭代方式。
- for in 语句以任意顺序迭代对象的可枚举属性。
- for of 语句遍历可迭代对象定义要迭代的数据。
比如:
Object.prototype.objCustom = function() {};
Array.prototype.arrCustom = function() {};
let iterable = [3, 5, 7];
iterable.foo = 'hello';
console.log(iterable)
// [3, 5, 7, foo: 'hello']
for (let i in iterable) {
console.log(i);
// 0, 1, 2, "foo", "arrCustom", "objCustom"
}
for (let i of iterable) {
console.log(i);
// 3, 5, 7
}
上述代码中每个对象 Object 都将继承 objCustom 的属性,并且作为 Array 的每个对象要继承 arrCustom 属性,因此对象 iterable 继承属性 objCustom 和 arrCustom。
在使用 for in 迭代数据时,循环打印的是 iterable 对象的所有可枚举属性,它不打印数组元素 3, 5,7 或 hello,因为这些不是枚举属性,它打印了数组的索引以及 arrCustom 和 objCustom。
for (let i in iterable) {
console.log(i); // 0, 1, 2, "foo", "arrCustom", "objCustom"
}
在使用 for of 迭代数据时,循环打印的是 iterable 作为可迭代对象定义的迭代值,即数组元素 3,5,7,不包括继承下来 objCustom 和 arrCustom 的值。
for (let i of iterable) {
console.log(i); // 3, 5, 7
}