es6의 새로운 루프는 무엇입니까?
ES6에는 "for of" 루프라는 새로운 루프 문이 있습니다. "for..of" 문은 전체 객체를 반복할 수 있으며 반복자에 의해 생성된 일련의 값의 루프입니다. "for..of" 루프의 값은 반복 가능해야 하며, "for(배열의 현재 값){...}" 구문. for-of 루프는 배열을 지원할 뿐만 아니라 대부분의 배열과 유사한 객체도 지원합니다. 또한 문자열 순회를 지원하고 문자열을 일련의 유니코드 문자로 순회합니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, ECMAScript 버전 6, Dell G3 컴퓨터.
과거에는 for 루프와 for in 루프가 있었지만 ES6에는 새로운 루프가 있습니다. for of 루프: 전체 객체를 탐색(반복, 루프)합니다.
for..of
ES6에는 반복자에서 일련의 값을 생성하는 루프인 새로운 for..of
루프가 추가되었습니다. for..of
루프의 값은 반복 가능
이어야 합니다. 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
的值上循环。【相关推荐:javascript视频教程、web前端】
<span style="font-size: 18px;">ES6</span>
之前的代码
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
<span style="font-size: 18px;">for(XYZ of ABC)</span>
对于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
const arr = ['a', 'b', 'c']; const iter = arr[Symbol.iterator](); iter.next() // { value: 'a', done: false } iter.next() // { value: 'b', done: false } iter.next() // { value: 'c', done: false } iter.next() // { value: undefined, done: true }
for..in
은 a
배열의 키/인덱스, a
의 for..of
를 반복합니다. > 값을 반복합니다. [관련 권장사항: javascript 비디오 튜토리얼, 웹 프런트 엔드】< code >ES6이전 코드
window.onload=function(){ const arr = [55,00, 11, 22]; arr.name = "hello"; // Array.prototype.FatherName = 'FatherName'; /*for(let key in arr){ console.log('key='+key+',key.value='+arr[key]); }*/ /* arr.forEach((data) => {console.log(data);});*/ /* arr.forEach((data,index,arr) => {console.log(data+','+index+','+arr);});*/ /*for(let key of arr){ console.log(key); }*/ var string1 = 'abcdefghijklmn'; var string2 = 'opqrstuvwxyc'; const stringArr = [string1,string2]; for(let key of stringArr){ console.log(key); } for(let key of string1){ console.log(key); } }
- 하단의
for..of
루프는 iterable에서 반복자를 요청한 다음 이 반복자를 반복적으로 호출하여 생성합니다. 값은 루프 반복 변수에 할당됩니다.
JavaScript
기본적으로 반복 가능으로 설정되는 표준 내장 값은 다음과 같습니다. Array
Strings
생성기</code code></li><li><code>Collections/TypedArrays
- 문자열 반복 방법
var s1 = new Set(); // 空Set var s2 = new Set([1, 2, 3]); // 含1, 2, 3
반복 가능
🎜🎜🎜for(XYZ of ABC)🎜
🎜🎜입니다. 🎜XYZ
의 경우 이 위치는 할당 표현식이나 명령문이 될 수 있습니다. 할당 표현식의 예를 살펴보겠습니다. 🎜var s = new Set([1, 2, 3, 3, '3']);
console.log(s); // Set {1, 2, 3, "3"}
로그인 후 복사로그인 후 복사🎜 break
, continue
, return
을 통해 루프를 조기에 종료합니다. 🎜🎜🎜Custom iterator🎜🎜🎜🎜기본 레이어에 대한 이해를 통해 for..of
는 iterable
에 요청합니다. 그런 다음 이 반복자를 반복적으로 호출하여 생성된 값을 루프 반복 변수에 할당합니다. 그런 다음 iterable
을 맞춤설정할 수 있습니다. 🎜var s = new Set([1, 2, 3]);
s.add(4);
s; // Set {1, 2, 3, 4}
s.add(4);
s; // Set {1, 2, 3, 4}
로그인 후 복사로그인 후 복사🎜사용자 정의 반복자가 [Symbol.iterator]
속성 두 가지 조건을 만족하고 반환된 객체에 next
메서드인 next가 있음을 알 수 있습니다.
메서드의 반환 값은 {value:xx,done:xx}
형식이어야 합니다. done:true
가 발생하면 루프가 종료됩니다. . 🎜🎜결론: 위 내용은 반복 가능한 객체를 반복할 수 있는 for..of 루프의 전체 내용입니다. 🎜🎜🎜지식 확장: for-of가 도입된 이유는 무엇인가요? 🎜🎜🎜이 질문에 답하기 위해 먼저 ES6 이전의 세 가지 for 루프의 단점을 살펴보겠습니다. 🎜🎜🎜forEach는 중단 및 반환이 불가능합니다. 🎜🎜for-in은 요소를 순회할 뿐만 아니라 배열, 사용자 정의 속성도 순회하며 프로토타입 체인의 속성에도 액세스됩니다. 또한 배열 요소가 순회되는 순서는 무작위일 수 있습니다. 🎜🎜🎜그래서 위의 결함을 고려하여 원본 for 루프를 개선해야 합니다. 하지만 ES6은 여러분이 작성한 JS 코드를 깨뜨리지 않습니다. 오늘날 수천 개의 웹 사이트가 for-in 루프에 의존하고 있으며 일부는 배열 순회에도 사용합니다. for-in 루프를 수정하여 배열 탐색 지원을 추가하면 더욱 혼란스러워질 수 있으므로 표준 위원회는 현재 문제인 for-of 를 해결하기 위해 ES6에 새로운 루프 구문을 추가했습니다. 🎜🎜그러면 for-of는 정확히 무엇을 할 수 있나요? 🎜🎜🎜forEach에 비해 break, continue, return에 올바르게 응답할 수 있습니다. 🎜🎜for-of 루프는 배열뿐만 아니라 DOM nodelist 개체와 같은 배열과 유사한 대부분의 개체도 지원합니다. 🎜🎜for-of 루프는 문자열을 일련의 유니코드 문자로 탐색하는 문자열 탐색도 지원합니다. 🎜🎜for-of는 Map 및 Set(ES6의 새로운 유형 모두) 객체 탐색도 지원합니다. 🎜🎜🎜요약하자면 for-of 루프의 특징은 다음과 같습니다. 🎜- 这是最简洁、最直接的遍历数组元素的语法。
- 这个方法避开了 for-in 循环的所有缺陷。
- 与 forEach 不同的是,它可以正确响应 break、continue 和 return 语句。
- 其不仅可以遍历数组,还可以遍历类数组对象和其他可迭代对象。
var s = new Set([1, 2, 3, 3, '3']); console.log(s); // Set {1, 2, 3, "3"}
for..of
는 iterable
에 요청합니다. 그런 다음 이 반복자를 반복적으로 호출하여 생성된 값을 루프 반복 변수에 할당합니다. 그런 다음 iterable
을 맞춤설정할 수 있습니다. 🎜var s = new Set([1, 2, 3]); s.add(4); s; // Set {1, 2, 3, 4} s.add(4); s; // Set {1, 2, 3, 4}
[Symbol.iterator]
속성 두 가지 조건을 만족하고 반환된 객체에 next
메서드인 next가 있음을 알 수 있습니다.
메서드의 반환 값은 {value:xx,done:xx}
형식이어야 합니다. done:true
가 발생하면 루프가 종료됩니다. . 🎜🎜결론: 위 내용은 반복 가능한 객체를 반복할 수 있는 for..of 루프의 전체 내용입니다. 🎜🎜🎜지식 확장: for-of가 도입된 이유는 무엇인가요? 🎜🎜🎜이 질문에 답하기 위해 먼저 ES6 이전의 세 가지 for 루프의 단점을 살펴보겠습니다. 🎜🎜🎜forEach는 중단 및 반환이 불가능합니다. 🎜🎜for-in은 요소를 순회할 뿐만 아니라 배열, 사용자 정의 속성도 순회하며 프로토타입 체인의 속성에도 액세스됩니다. 또한 배열 요소가 순회되는 순서는 무작위일 수 있습니다. 🎜🎜🎜그래서 위의 결함을 고려하여 원본 for 루프를 개선해야 합니다. 하지만 ES6은 여러분이 작성한 JS 코드를 깨뜨리지 않습니다. 오늘날 수천 개의 웹 사이트가 for-in 루프에 의존하고 있으며 일부는 배열 순회에도 사용합니다. for-in 루프를 수정하여 배열 탐색 지원을 추가하면 더욱 혼란스러워질 수 있으므로 표준 위원회는 현재 문제인 for-of 를 해결하기 위해 ES6에 새로운 루프 구문을 추가했습니다. 🎜🎜그러면 for-of는 정확히 무엇을 할 수 있나요? 🎜🎜🎜forEach에 비해 break, continue, return에 올바르게 응답할 수 있습니다. 🎜🎜for-of 루프는 배열뿐만 아니라 DOM nodelist 개체와 같은 배열과 유사한 대부분의 개체도 지원합니다. 🎜🎜for-of 루프는 문자열을 일련의 유니코드 문자로 탐색하는 문자열 탐색도 지원합니다. 🎜🎜for-of는 Map 및 Set(ES6의 새로운 유형 모두) 객체 탐색도 지원합니다. 🎜🎜🎜요약하자면 for-of 루프의 특징은 다음과 같습니다. 🎜- 这是最简洁、最直接的遍历数组元素的语法。
- 这个方法避开了 for-in 循环的所有缺陷。
- 与 forEach 不同的是,它可以正确响应 break、continue 和 return 语句。
- 其不仅可以遍历数组,还可以遍历类数组对象和其他可迭代对象。
但需要注意的是,for-of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用
for-in 循环(这也是它的本职工作)。
最后要说的是,ES6 引进的另一个方式也能实现遍历数组的值,那就是 Iterator。上个例子:
const arr = ['a', 'b', 'c']; const iter = arr[Symbol.iterator](); iter.next() // { value: 'a', done: false } iter.next() // { value: 'b', done: false } iter.next() // { value: 'c', done: false } iter.next() // { value: undefined, done: true }
前面的不多说,重点描述for-of
for-of循环不仅支持数组,还支持大多数类数组对象,例如DOM NodeList对象。
for-of循环也支持字符串遍历,它将字符串视为一系列的Unicode字符来进行遍历:
window.onload=function(){ const arr = [55,00, 11, 22]; arr.name = "hello"; // Array.prototype.FatherName = 'FatherName'; /*for(let key in arr){ console.log('key='+key+',key.value='+arr[key]); }*/ /* arr.forEach((data) => {console.log(data);});*/ /* arr.forEach((data,index,arr) => {console.log(data+','+index+','+arr);});*/ /*for(let key of arr){ console.log(key); }*/ var string1 = 'abcdefghijklmn'; var string2 = 'opqrstuvwxyc'; const stringArr = [string1,string2]; for(let key of stringArr){ console.log(key); } for(let key of string1){ console.log(key); } }
结果:
现在,只需记住:
- 这是最简洁、最直接的遍历数组元素的语法
- 这个方法避开了for-in循环的所有缺陷
- 与forEach()不同的是,它可以正确响应break、continue和return语句
for-in循环用来遍历对象属性。
for-of循环用来遍历数据—例如数组中的值。
它同样支持Map和Set对象遍历。
Map和Set对象是ES6中新增的类型。ES6中的Map和Set和java中并无太大出入。
Set
和Map
类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set
中,没有重复的key。
要创建一个Set
,需要提供一个Array
作为输入,或者直接创建一个空Set
:
var s1 = new Set(); // 空Set var s2 = new Set([1, 2, 3]); // 含1, 2, 3
重复元素在Set中自动被过滤:
var s = new Set([1, 2, 3, 3, '3']); console.log(s); // Set {1, 2, 3, "3"}
通过add(key)
方法可以添加元素到Set
中,可以重复添加,但不会有效果:
var s = new Set([1, 2, 3]); s.add(4); s; // Set {1, 2, 3, 4} s.add(4); s; // Set {1, 2, 3, 4}
通过delete(key)
方法可以删除元素:
var s = new Set([1, 2, 3]); s; // Set {1, 2, 3} s.delete(3); s; // Set {1, 2}
Set对象可以自动排除重复项
var string1 = 'abcdefghijklmn'; var string2 = 'opqrstuvwxyc'; var string3 = 'opqrstuvwxyc'; var string4 = 'opqrstuvwxyz'; const stringArr = [string1,string2,string3,string4]; var newSet = new Set(stringArr); for(let key of newSet){ console.log(key); }
结果:
Map对象稍有不同:内含的数据由键值对组成,所以你需要使用解构(destructuring)来将键值对拆解为两个独立的变量:
for (var [key, value] of phoneBookMap) { console.log(key + "'s phone number is: " + value); }
示例
var m = new Map([[1, 'Michael'], [2, 'Bob'], [3, 'Tracy']]); var map = new Map([['1','Jckey'],['2','Mike'],['3','zhengxin']]); map.set('4','Adam');//添加key-value map.set('5','Tom'); map.set('6','Jerry'); console.log(map.get('6')); map.delete('6'); console.log(map.get('6')); for(var [key,value] of map) { console.log('key='+key+' , value='+value); }
结果:
위 내용은 es6의 새로운 루프는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











WebSocket 및 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 소개: 지속적인 기술 개발로 음성 인식 기술은 인공 지능 분야의 중요한 부분이 되었습니다. WebSocket과 JavaScript를 기반으로 한 온라인 음성 인식 시스템은 낮은 대기 시간, 실시간, 크로스 플랫폼이라는 특징을 갖고 있으며 널리 사용되는 솔루션이 되었습니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법을 소개합니다.

WebSocket과 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 서론: 인터넷 기술의 급속한 발전과 함께 실시간 모니터링 시스템이 다양한 분야에서 널리 활용되고 있다. 실시간 모니터링을 구현하는 핵심 기술 중 하나는 WebSocket과 JavaScript의 조합입니다. 이 기사에서는 실시간 모니터링 시스템에서 WebSocket 및 JavaScript의 적용을 소개하고 코드 예제를 제공하며 구현 원칙을 자세히 설명합니다. 1. 웹소켓 기술

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 소개: 인터넷의 대중화와 기술의 발전으로 점점 더 많은 레스토랑에서 온라인 주문 서비스를 제공하기 시작했습니다. 실시간 온라인 주문 시스템을 구현하기 위해 JavaScript 및 WebSocket 기술을 사용할 수 있습니다. WebSocket은 TCP 프로토콜을 기반으로 하는 전이중 통신 프로토콜로 클라이언트와 서버 간의 실시간 양방향 통신을 실현할 수 있습니다. 실시간 온라인 주문 시스템에서는 사용자가 요리를 선택하고 주문을 하면

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 오늘날의 디지털 시대에는 점점 더 많은 기업과 서비스에서 온라인 예약 기능을 제공해야 합니다. 효율적인 실시간 온라인 예약 시스템을 구현하는 것이 중요합니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. WebSocket이란 무엇입니까? WebSocket은 단일 TCP 연결의 전이중 방식입니다.

JavaScript 및 WebSocket: 효율적인 실시간 일기 예보 시스템 구축 소개: 오늘날 일기 예보의 정확성은 일상 생활과 의사 결정에 매우 중요합니다. 기술이 발전함에 따라 우리는 날씨 데이터를 실시간으로 획득함으로써 보다 정확하고 신뢰할 수 있는 일기예보를 제공할 수 있습니다. 이 기사에서는 JavaScript 및 WebSocket 기술을 사용하여 효율적인 실시간 일기 예보 시스템을 구축하는 방법을 알아봅니다. 이 문서에서는 특정 코드 예제를 통해 구현 프로세스를 보여줍니다. 우리

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

사용법: JavaScript에서 insertBefore() 메서드는 DOM 트리에 새 노드를 삽입하는 데 사용됩니다. 이 방법에는 삽입할 새 노드와 참조 노드(즉, 새 노드가 삽입될 노드)라는 두 가지 매개 변수가 필요합니다.

JavaScript에서 HTTP 상태 코드를 얻는 방법 소개: 프런트 엔드 개발에서 우리는 종종 백엔드 인터페이스와의 상호 작용을 처리해야 하며 HTTP 상태 코드는 매우 중요한 부분입니다. HTTP 상태 코드를 이해하고 얻는 것은 인터페이스에서 반환된 데이터를 더 잘 처리하는 데 도움이 됩니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. HTTP 상태 코드란 무엇입니까? HTTP 상태 코드는 브라우저가 서버에 요청을 시작할 때 서비스가
