文章详情
for..of
ES6新增了一个for..of
循环,在迭代器生产的一系列值的循环。for..of
循环的值必须是一个iterable
。
var a = ["a", "b","c","d","e"]
for(var idx in a){
console.log(idx)
}
// 0 1 2 3 4
for(var val of a){
console.log(val)
}
// a b c d e
for..in
在数组a
的键/索引上循环,for..of
在a
的值上循环。
ES6
之前的代码
var a = ["a", "b","c","d","e"]
for(var val, ret, it = a[Symbol.iterator]();(ret=it.next()) && !ret.done){
val = ret.value
console.log(val)
}
// a b c d e
在底层,for..of循环向iterable请求一个迭代器,然后反复调用这个迭代器把它产生的值赋给循环迭代变量。
JavaScript
默认为iterable的标准内建值包括:
Array
Strings
Generators
Collections/TypedArrays
字符串迭代方式
for(var c of "hello"){
console.log(c)
}
// h e l l o
原生字符串值被强制类型转换到等价的String封装对象中,它是一个iterable
for(XYZ of ABC)
对于XYZ
这个位置既可以是赋值表达式,也可以是声明。下面看个赋值表达式的例子:
var o = {}
for(o.a of [1,2,3]){
console.log(o.a)
}
o // {a:3}
for({x:o.a} of [{x:1},{x:2},{x:3}]){
console.log(o.a)
}
o // {a:3}
通过break
,continue
,return
提前终止循环。
自定义迭代器
通过对底层的了解,for..of
向iterable
请求一个迭代器,然后反复调用这个迭代器把它产生的值赋给循环迭代变量。那么我可以自定义一个iterable
。
var o = {
[Symbol.iterator](){
return this
},
next(){
if(!val){
val = 1
}else{
val ++
}
return {value:val, done:val== 6}
}
}
for(var val of o[Symbol.iterator]()){
console.log(val)
}
由此可见,自定义迭代器满足两个条件,[Symbol.iterator]
属性,返回的对象中有next
方法,next
方法返回值必须是{value:xx,done:xx}
的形式,如果遇到done:true
,则循环结束。
结语:以上就是for..of循环的全部内容,它可以循环可迭代对象。
您可能感兴趣的文章:
- JavaScript正则表达式获取图片链接地址
- 最完整指南 JavaScript 的错误处理
- JavaScript前后端JSON使用方法教程
- 详解JavaScript原型与原型链
- JavaScript 实现拖拽效果组件功能(兼容移动端)
- JavaScript中常用的3种弹出提示框(alert、confirm、prompt)
- 夯基础之手撕javascript继承详解
- JavaScript 实现轮播图特效的示例
版权:版权申明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 70068002@qq.com 举报,一经查实,本站将立刻删除。
转载请注明出处:https://www.stntk.com/2530.html
还没有评论呢,快来抢沙发~