You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
var a = 1
var loop = {
[Symbol.iterator]: function(){ return this },
next: () => {
return {
done: a > 100,
value: a++
}
}
}
for(let v of loop){
console.log(v)
}
for...of 会自动调用 next 函数然后读取其返回的 value 值,并且根据 done 属性决定是否继续遍历,上面的示例就是输出 1到100 的数字
The text was updated successfully, but these errors were encountered:
for, for-in, for-of
for
这个应该是学编程的时候,循环的初认识吧,最基础的 for 循环其结构为
其中初始化,条件语句,final-expression 都是可以省略的,但须要确保正确跳出循环,以免陷入死循环
statement 中可以使用 break 和 continue 关键字退出和跳过本次循环
要注意的是,在初始化阶段,应该尽量避免使用 var 去声明变量,由于 ES5 没有块级作用域,所以 var 会把声明上升,因而有可能会出现变量污染,比如很常见的一道题
改成 let 就可以使该循环正常输出 0-9,let 实际上为 JavaScript 新增了块级作用域。
普通 for 循环由于初始化和条件语句都是由开发者自行决定,所以就没有太多使用限制
for-in
for-in 一般用来遍历对象,而非遍历数组(虽然它可以用来遍历数组),因为通常数组的遍历是需要升序的,但它不能保证这一点,并且它返回的 key 为字符串,若以 key 做一些计算,可能会引起一些不必要的麻烦,并且,假如有通过 prototype 拓展了 Array 的原型,如果没有设置该属性是否可枚举,则通过 for-in 循环时,会将其一并遍历,如下:
for...in 循环会像 [[Getter]] 一样从原型链上查找属性,所以只要其原型上有相应的可枚举属性,for...in 都能遍历到,如下
continue 和 break 对 for-in 是无效的
for-of
相比 for-in, for-of 可以遍历更多的迭代器,诸如 Map, Set, arguments 对象, String(相比以前,就省去了 string 转数组这一步了),for-of 可以使用 continue, break, throw, return 等跳出循环
for...of 还能遍历我们自定义的迭代器,只要其有 [Symbol.iterator] 属性
举个例子
for...of 会自动调用 next 函数然后读取其返回的 value 值,并且根据 done 属性决定是否继续遍历,上面的示例就是输出 1到100 的数字
The text was updated successfully, but these errors were encountered: