當乙個物件實現了symbol.iterator
屬性時,我們認為它是可迭代的。 一些內建的型別如array
,map
,set
,string
,int32array
,uint32array
等都已經實現了各自的symbol.iterator
。 物件上的symbol.iterator
函式負責返回供迭代的值。
for..of
會遍歷可迭代的物件,呼叫物件上的symbol.iterator
方法。 下面是在陣列上使用for..of
的簡單例子:
let somearray = [1, "string", false];
for (let entry of somearray)
for..of
和for..in
均可迭代乙個列表;但是用於迭代的值卻不同,for..in
迭代的是物件的 鍵 的列表,而for..of
則迭代物件的鍵對應的值。
下面的例子展示了兩者之間的區別:
let list = [4, 5, 6];
for (let i in list)
for (let i of list)
另乙個區別是for..in
可以操作任何物件;它提供了檢視物件屬性的一種方法。 但是for..of
關注於迭代物件的值。內建物件map
和set
已經實現了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介面
在物件導向的程式設計中,介面是一種規範的定義,它定義了行為和動作的規範,在程式設計裡面,介面起到一種限制和規範的作用。介面定義了某一批類所需要遵循的規範,介面不關心這些類的內部狀態資料,也不關心這些類裡的方法的實現細節,它只規定這批類裡必須提供某些方法,提供某些方法,提供這些方法的類就可以滿足實際需...