TypeScript筆記 迭代器和生成器(八)

2021-08-31 01:23:12 字數 1488 閱讀 1920

當乙個物件實現了symbol.iterator屬性時,我們認為它是可迭代的。 一些內建的型別如arraymapsetstringint32arrayuint32array等都已經實現了各自的symbol.iterator。 物件上的symbol.iterator函式負責返回供迭代的值。

for..of會遍歷可迭代的物件,呼叫物件上的symbol.iterator方法。 下面是在陣列上使用for..of的簡單例子:

let somearray = [1, "string", false];

for (let entry of somearray)

for..offor..in均可迭代乙個列表;但是用於迭代的值卻不同,for..in迭代的是物件的 鍵 的列表,而for..of則迭代物件的鍵對應的值。

下面的例子展示了兩者之間的區別:

let list = [4, 5, 6];

for (let i in list)

for (let i of list)

另乙個區別是for..in可以操作任何物件;它提供了檢視物件屬性的一種方法。 但是for..of關注於迭代物件的值。內建物件mapset已經實現了symbol.iterator方法,讓我們可以訪問它們儲存的值。

let pets = new set(["cat", "dog", "hamster"]);

pets["species"] = "mammals";

for (let pet in pets)

for (let pet of pets)

當生成目標為es5或es3,迭代器只允許在array型別上使用。 在非陣列值上使用for..of語句會得到乙個錯誤,就算這些非陣列值已經實現了symbol.iterator屬性。

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

let numbers = [1, 2, 3];

for (let num of numbers)

生成的**為:

var numbers = [1, 2, 3];

for (var _i = 0; _i < numbers.length; _i++)

Typescript學習筆記

物件導向特性 類類的宣告 用class關鍵字 加類名 class person 類宣告完之後就可以被例項化了,類相當於乙個模子.name string eat var p1 new person p1.name batman p1.eat var p2 new person p2.name supe...

typescript學習筆記

1,ts是js的超集,ts是強型別語言。ts比js入門更難。ts的物件導向寫法比js更優雅。ts更適合團隊協作。2,宣告變數篇。3,宣告函式篇。4,物件導向篇。4.1,子類繼承父類 extends 繼承多個介面 implements。4.2,this表示當前物件,super表示父類物件。子類不寫co...

筆記 TypeScript介面

在物件導向的程式設計中,介面是一種規範的定義,它定義了行為和動作的規範,在程式設計裡面,介面起到一種限制和規範的作用。介面定義了某一批類所需要遵循的規範,介面不關心這些類的內部狀態資料,也不關心這些類裡的方法的實現細節,它只規定這批類裡必須提供某些方法,提供某些方法,提供這些方法的類就可以滿足實際需...