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 비디오 튜토리얼, 웹 프런트 엔드】
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> 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 语句。
- 其不仅可以遍历数组,还可以遍历类数组对象和其他可迭代对象。
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

ID 선택기를 사용하는 것은 본질적으로 CSS에서 나쁘지 않지만주의해서 사용해야합니다. 1) ID 선택기는 고유 한 요소 또는 JavaScript 후크에 적합합니다. 2) 일반적인 스타일의 경우 클래스 선택기가보다 유연하고 유지 관리 가능하므로 사용해야합니다. ID 및 클래스 사용의 균형을 유지함으로써보다 강력하고 효율적인 CSS 아키텍처를 구현할 수 있습니다.

HTML5'SGOALSIN2024FOCUSONERFINEMENTANDENDEND 및 최적화, NOTNEWFEATURES.1) 최적화 된 렌더링을 향상시킵니다

html5aimedtoimprovewebdevelopmentinfourkeyareas : 1) Multimediasupport, 2) Semantictructure, 3) Formcapabilities, 및 4) OfflineandStorageOptions.1) Html5intrudceDandlements, Simplifying MediaembeddingandenUsereXperxpercepence.2) NewSmanticallementalmentalmentementlementmentmentmentmentmentmentmentmentmentmentmentmentmentmentmentmentmentmentalments

idsshouldBeusedforjavaScriptThooks, whileclassesarebetterforstyling.1) 1) USECLASSESTYLINGTOWALLOWFOREASIEREASEANDAVOIDSPECIFICITISUES.2) USEDSFORJAVASCRIPTHOOKSTOUNIQUELIDINTIFYELEMENTS.3) 피할 수있는 TeepSelectorsSimpleApperforformance.4

classselectorsareversatiledreusable, whileDselectorsareUniqueAndspecific.1) USECLASSSELECTORS (DENOTEDBY.) ForstylingMultipleElementSwithSharedCharacteristics

idsareUniqueIndifiersforsinglelemes, whileclassesstylemultipleements.1) useidsforuniqueElements 및 Javascripthooks.2) useclassessforusable, flexiblestylingacrossmultipleelements.

클래스 전용 선택기를 사용하면 코드 재사용 성과 유지 관리가 향상 될 수 있지만 클래스 이름 및 우선 순위를 관리해야합니다. 1. 재사용 성과 유연성 향상, 2. 여러 클래스를 결합하여 복잡한 스타일을 만들고, 3. 긴 클래스 이름과 우선 순위로 이어질 수 있습니다.

ID 및 클래스 선택기는 각각 고유 및 멀티 요소 스타일 설정에 CSS에서 사용됩니다. 1. ID 선택기 (#)는 특정 탐색 메뉴와 같은 단일 요소에 적합합니다. 2. 클래스 선택기 (.)는 통합 버튼 스타일과 같은 여러 요소에 사용됩니다. ID는주의해서 사용하고 과도한 특이성을 피하며 스타일 재사용 성과 유연성을 향상시키기 위해 클래스를 우선시해야합니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

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

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

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

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.