検索

es6 の新しいループとは何ですか?

Nov 07, 2022 pm 07:29 PM
javascriptes6ループ構造ループスルー

es6 には、新しいループ ステートメント「for of」ループがあります。 「for..of」ステートメントはオブジェクト全体をループでき、反復子によって生成される一連の値のループです。「for..of」ループの値は反復可能 (iterable) である必要があります。構文「for(配列の現在値){...}」。 for-of ループは配列をサポートするだけでなく、ほとんどの配列のようなオブジェクトもサポートします。また、文字列のトラバースもサポートし、文字列を一連の Unicode 文字としてトラバースします。

es6 の新しいループとは何ですか?

このチュートリアルの動作環境: Windows 7 システム、ECMAScript バージョン 6、Dell G3 コンピューター。

これまでは、for ループと for in ループがありましたが、ES6 には新しいループがあります: for of ループ: オブジェクト全体を走査 (反復、ループ) します。

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配列 afor..ofina のキー/インデックスをループします。ループ値を超えています。 [関連する推奨事項: 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デフォルトで反復可能な標準の組み込み値には、次のものが含まれます:

  • Array
  • Strings
  • Generators
  • Collections/TypedArrays

##Strings 反復メソッド

for(var c of "hello"){
    console.log(c)
}
// h e l l o

ネイティブ文字列値は、iterable

## である同等の String カプセル化オブジェクトにキャストされます。 for(XYZ of ABC)<span style="font-size: 18px;"></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 continuereturn を通じてループを早期に終了します。

カスタム イテレータ

基礎となる層の理解を通じて、

for..of から iterable# へ##反復子を要求し、この反復子を繰り返し呼び出して、生成された値をループ反復変数に割り当てます。次に、iterable をカスタマイズできます。 <pre class='brush:php;toolbar:false;'>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) }</pre> カスタム イテレータは

[Symbol.iterator]

属性という 2 つの条件を満たしており、返されたオブジェクトには next メソッド があることがわかります。 next メソッドの戻り値は、{value:xx,done:xx} の形式である必要があります。done:true が見つかった場合、ループは終了します。 結論: 上記は、反復可能なオブジェクトをループできる for..of ループの内容全体です。

知識の拡大: for-of を導入する理由は何ですか?

この質問に答えるために、まず ES6 より前の 3 つの for ループの欠点を見てみましょう:

forEach は中断して返せない;
  • for-in の欠点はさらに明白で、配列内の要素を走査するだけでなく、カスタム プロパティも走査し、プロトタイプ チェーン上のプロパティにもアクセスします。また、配列要素が走査される順序はランダムになる場合があります。
  • したがって、上記の欠陥を考慮して、元の for ループを改善する必要があります。ただし、ES6 では、作成した JS コードが壊れることはありません。現在、何千もの Web サイトが for-in ループに依存しており、中には配列の走査に for-in ループを使用しているものもあります。 for-in ループを修正して配列トラバーサルのサポートを追加すると、さらに混乱が生じるため、標準化委員会は現在の問題を解決するために ES6 に新しいループ構文 for-of を追加しました。

それでは、for-of で何ができるのでしょうか?

forEach と比較して、break、 continue、return に正しく応答できます。
  • for-of ループは、配列だけでなく、DOM ノードリスト オブジェクトなど、ほとんどの配列のようなオブジェクトもサポートします。
  • for-of ループは、文字列を一連の Unicode 文字として走査する文字列走査もサポートしています。
  • for-of は、Map と Set (どちらも ES6 の新しいタイプ) オブジェクト トラバーサルもサポートしています。
  • 要約すると、for-of ループには次の特徴があります:
  • 这是最简洁、最直接的遍历数组元素的语法。
  • 这个方法避开了 for-in 循环的所有缺陷。
  • 与 forEach 不同的是,它可以正确响应 break、continue 和 return 语句。
  • 其不仅可以遍历数组,还可以遍历类数组对象和其他可迭代对象。

但需要注意的是,for-of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用
for-in 循环(这也是它的本职工作)。

最后要说的是,ES6 引进的另一个方式也能实现遍历数组的值,那就是 Iterator。上个例子:

const arr = [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;];
const iter = arr[Symbol.iterator]();
 
iter.next() // { value: &#39;a&#39;, done: false }
iter.next() // { value: &#39;b&#39;, done: false }
iter.next() // { value: &#39;c&#39;, 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 = &#39;FatherName&#39;;
   /*for(let key in arr){
    console.log(&#39;key=&#39;+key+&#39;,key.value=&#39;+arr[key]);
   }*/
   /* arr.forEach((data) => {console.log(data);});*/
  /* arr.forEach((data,index,arr) => {console.log(data+&#39;,&#39;+index+&#39;,&#39;+arr);});*/
  /*for(let key of arr){
    console.log(key);
  }*/
  var string1 = &#39;abcdefghijklmn&#39;;
  var string2 = &#39;opqrstuvwxyc&#39;;
  const stringArr = [string1,string2];
  for(let key of stringArr){
    console.log(key);
  }
  for(let key of string1){
    console.log(key);
  }
}

结果:

es6 の新しいループとは何ですか?

现在,只需记住:

  • 这是最简洁、最直接的遍历数组元素的语法
  • 这个方法避开了for-in循环的所有缺陷
  • 与forEach()不同的是,它可以正确响应break、continue和return语句

for-in循环用来遍历对象属性。

for-of循环用来遍历数据—例如数组中的值。

它同样支持Map和Set对象遍历。

Map和Set对象是ES6中新增的类型。ES6中的Map和Set和java中并无太大出入。

SetMap类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。

要创建一个Set,需要提供一个Array作为输入,或者直接创建一个空Set

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3

es6 の新しいループとは何ですか?

重复元素在Set中自动被过滤:

var s = new Set([1, 2, 3, 3, '3']);
console.log(s); // Set {1, 2, 3, "3"}

es6 の新しいループとは何ですか?

通过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 = &#39;abcdefghijklmn&#39;;
  var string2 = &#39;opqrstuvwxyc&#39;;
  var string3 = &#39;opqrstuvwxyc&#39;;
  var string4 = &#39;opqrstuvwxyz&#39;;
 
  const stringArr = [string1,string2,string3,string4];
 
 
 var newSet = new Set(stringArr);
  for(let key of newSet){
    console.log(key);
  }

结果:

es6 の新しいループとは何ですか?

Map对象稍有不同:内含的数据由键值对组成,所以你需要使用解构(destructuring)来将键值对拆解为两个独立的变量:

for (var [key, value] of phoneBookMap) {   
console.log(key + "&#39;s phone number is: " + value);
}

 示例

var m = new Map([[1, &#39;Michael&#39;], [2, &#39;Bob&#39;], [3, &#39;Tracy&#39;]]);
  var map = new Map([[&#39;1&#39;,&#39;Jckey&#39;],[&#39;2&#39;,&#39;Mike&#39;],[&#39;3&#39;,&#39;zhengxin&#39;]]);
  map.set(&#39;4&#39;,&#39;Adam&#39;);//添加key-value
  map.set(&#39;5&#39;,&#39;Tom&#39;);
  map.set(&#39;6&#39;,&#39;Jerry&#39;);
  console.log(map.get(&#39;6&#39;));
  map.delete(&#39;6&#39;);
   console.log(map.get(&#39;6&#39;));
  for(var [key,value] of map) {
    console.log(&#39;key=&#39;+key+&#39; , value=&#39;+value);
  }

结果:

es6 の新しいループとは何ですか?

以上がes6 の新しいループとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
CSS:同じDOMで複数のIDを使用できますか?CSS:同じDOMで複数のIDを使用できますか?May 14, 2025 am 12:20 AM

いいえ、あなたはusemultipleidsinthemedom.1)idsmustbeuniqueperhtmlspecification、およびusingdusing cansistent browserbehavior.2)useclassesses forstylingmultipleElements、acturtorectorectorectorsectorgettributeurutuureのuseclasses forstyling forstyling forstyling forstyling forstyling forstyling rassess for -destendertantertorectorsutortortortruture

HTML5の目的:より強力でアクセス可能なWebを作成するHTML5の目的:より強力でアクセス可能なWebを作成するMay 14, 2025 am 12:18 AM

html5aimstoenhancewebcapability、makingmoredynamic、interactive、およびaccessible.1)itupportsmultimediaelementslikeand、排除、2)semanticelementionmentionmentionmentionimementsimementionimementsimementsimbrovecessibilityandcodereadability.3)

HTML5の重要な目標:Web開発とユーザーエクスペリエンスの向上HTML5の重要な目標:Web開発とユーザーエクスペリエンスの向上May 14, 2025 am 12:18 AM

html5aimstoenhancewebdevelymentanduserexperiencetheTheTheTheTheTheTheTheTheTructure、multimedieingegration、およびperformanceImprovements.1)semanticelementslike like like ,, and and requrovedababilityandaccessibility.2)andTagsallowseamlessmultimediaemdiding withoutplugins.3)

HTML5:安全ですか?HTML5:安全ですか?May 14, 2025 am 12:15 AM

html5isnotinherecureを使用しますが、featurescanleadtosecurityrisksifmisusedorimpremented.1)usetheSsandboxattribution controlembeddeddeddeddedentandPreventvulnerabilitieslikeclickjacking.2)

HTML5は、古いHTMLバージョンと比較して目標を達成しますHTML5は、古いHTMLバージョンと比較して目標を達成しますMay 14, 2025 am 12:14 AM

html5aimedtoeenhancewebdevelopmentbyintroducingsmanticelements、nativemultimediasupport、改善、およびオフリンの実行可能性、対照、html.1)itintroductuedsemantictagslike、nattructurcturcurean desieand.2)

CSS:IDセレクターを使用するのは悪いですか?CSS:IDセレクターを使用するのは悪いですか?May 13, 2025 am 12:14 AM

IDセレクターを使用することは、CSSでは本質的に悪くはありませんが、注意して使用する必要があります。 1)IDセレクターは、一意の要素またはJavaScriptフックに適しています。 2)一般的なスタイルの場合、クラスセレクターはより柔軟で保守可能であるため、使用する必要があります。 IDとクラスの使用のバランスをとることにより、より堅牢で効率的なCSSアーキテクチャを実装できます。

HTML5:2024年の目標HTML5:2024年の目標May 13, 2025 am 12:13 AM

HTML5'SGOALSIN2024FOCUSONREFINIMINGANDOPTIMIZATION、notnewfeatures.1)強化された拡張性と拡張効率化されたレンダリング.2)

HTML5が改善しようとした主な領域は何ですか?HTML5が改善しようとした主な領域は何ですか?May 13, 2025 am 12:12 AM

html5aimed toemprovewebdevelymentinfourkeyareas:1)multimediasupport、2)セマンティクス構造、3)フォームキャピリティ、および4)offlineandstorageoptions.1)html5introduededelements、simplifiedediaembedingemencemanteddim.2)

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール