TypeScript Iterators

admin發表於2018-08-06

ES2015新增Iterator 遍歷器,具體可以參閱JavaScript Iterator 遍歷器一章節。

下面介紹一下TS程式碼編譯生成不同版本的JS程式碼時的區別。

目標為 ES5 和 ES3:

當生成目標為ES5或ES3,迭代器只允許在Array型別上使用。 

在非陣列值上使用for..of語句會得到一個錯誤,就算這些非陣列值已經實現了Symbol.iterator屬性。

編譯器會生成一個簡單的for迴圈做為for..of迴圈,比如:

[typescript] 純文字檢視 複製程式碼
let numbers = [1, 2, 3];
for (let num of numbers) {
  console.log(num);
}

編譯生成JavaScript程式碼如下:

[JavaScript] 純文字檢視 複製程式碼
var numbers = [1, 2, 3];
for (var _i = 0; _i < numbers.length; _i++) {
  var num = numbers[_i];
  console.log(num);
}

目標為 ECMAScript 2015 或更高:

當目標為相容ECMAScipt 2015的引擎時,編譯器會生成相應引擎的for..of內建迭代器實現方式。

相關文章