鍍金池/ 教程/ HTML/ 可迭代性
初始化項(xiàng)目結(jié)構(gòu)
聯(lián)合類(lèi)型
介紹
介紹
介紹
編譯選項(xiàng)
TypeScript 1.6
介紹
介紹
發(fā)展路線(xiàn)圖
介紹
在MSBuild里使用編譯選項(xiàng)
可迭代性
TypeScript 1.3
介紹
介紹
TypeScript 1.1
變量聲明
即將到來(lái)的Angular 2框架是使用TypeScript開(kāi)發(fā)的。 因此Angular和TypeScript一起使用非常簡(jiǎn)單方便
tsconfig.json
介紹
介紹
介紹
在MSBuild里使用編譯選項(xiàng)
使用TypeScript的每日構(gòu)建版本
新建工程
枚舉
三斜線(xiàn)指令
結(jié)合ASP.NET v5使用TypeScript
TypeScript里的this
介紹
TypeScript 1.4
編碼規(guī)范
介紹
模塊解析
ASP.NET 4
架構(gòu)概述
介紹
介紹
ASP.NET Core
TypeScript 1.8
介紹
介紹
創(chuàng)建簡(jiǎn)單工程
TypeScript 1.7
TypeScript 1.5
NPM包的類(lèi)型
支持TypeScript的編輯器

可迭代性

當(dāng)一個(gè)對(duì)象實(shí)現(xiàn)了Symbol.iterator屬性時(shí),我們認(rèn)為它是可迭代的。 一些內(nèi)置的類(lèi)型如Array,Map,Set,String,Int32ArrayUint32Array等都已經(jīng)實(shí)現(xiàn)了各自的Symbol.iterator。 對(duì)象上的Symbol.iterator函數(shù)負(fù)責(zé)返回供迭代的值。

for..of 語(yǔ)句

for..of會(huì)遍歷可迭代的對(duì)象,調(diào)用對(duì)象上的Symbol.iterator方法。 下面是在數(shù)組上使用for..of的簡(jiǎn)單例子:

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

for (let entry of someArray) {
    console.log(entry); // 1, "string", false
}

for..of vs. for..in 語(yǔ)句

for..offor..in均可迭代一個(gè)列表;但是用于迭代的值卻不同,for..in迭代的是對(duì)象的 的列表,而for..of則迭代對(duì)象的鍵對(duì)應(yīng)的值。

下面的例子展示了兩者之間的區(qū)別:

let list = [4, 5, 6];

for (let i in list) {
    console.log(i); // "0", "1", "2",
}

for (let i of list) {
    console.log(i); // "4", "5", "6"
}

另一個(gè)區(qū)別是for..in可以操作任何對(duì)象;它提供了查看對(duì)象屬性的一種方法。

但是for..of關(guān)注于迭代對(duì)象的值。內(nèi)置對(duì)象MapSet已經(jīng)實(shí)現(xiàn)了Symbol.iterator方法,讓我們可以訪問(wèn)它們保存的值。

let pets = new Set(["Cat", "Dog", "Hamster"]);
pets["species"] = "mammals";

for (let pet in pets) {
    console.log(pet); // "species"
}

for (let pet of pets) {
    console.log(pet); // "Cat", "Dog", "Hamster"
}

代碼生成

目標(biāo)為 ES5 和 ES3

當(dāng)生成目標(biāo)為ES5或ES3,迭代器只允許在Array類(lèi)型上使用。 在非數(shù)組值上使用for..of語(yǔ)句會(huì)得到一個(gè)錯(cuò)誤,就算這些非數(shù)組值已經(jīng)實(shí)現(xiàn)了Symbol.iterator屬性。

編譯器會(huì)生成一個(gè)簡(jiǎn)單的for循環(huán)做為for..of循環(huán),比如:

let numbers = [1, 2, 3];
for (let num of numbers) {
    console.log(num);
}

生成的代碼為:

var numbers = [1, 2, 3];
for (var _i = 0; _i < numbers.length; _i++) {
    var num = numbers[_i];
    console.log(num);
}

目標(biāo)為 ECMAScript 2015 或更高

當(dāng)目標(biāo)為兼容ECMAScipt 2015的引擎時(shí),編譯器會(huì)生成相應(yīng)引擎的for..of內(nèi)置迭代器實(shí)現(xiàn)方式。

上一篇:TypeScript 1.3下一篇:模塊解析