2016-07-22 108 views
0

我現在正在學習Typescript,並且對某些文檔的某些部分有所瞭解。參考代碼上typescript.lang手冊設置在Typescript/ECMAScript特徵

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" 
} 

我不明白,爲什麼設置都可以用類似「物種」寵物[「種」] =「哺乳動物」鍵進行設置。默認情況下,Set不是鍵值特性?

和爲什麼(讓寵物的寵物)是「貓」,「狗」,「倉鼠」不「哺乳動物」

請幫忙介紹。非常感謝

+0

這不是你如何給一個集合增加一個值。它有一個'.add'方法來添加值。 – loganfsmyth

回答

1

Set是一個可迭代對象,初始數組集合是可迭代值,這就是爲什麼你可以通過for..of訪問它們。當你說pets["species"]= "mamals"你正在創建一個屬性「物種」的值爲「mamals」,但這不是可迭代值的一部分,這就是爲什麼你可以在使用for..in時看到它。

for..of將顯示迭代的值,而for..in將顯示對象的屬性。我希望這可以幫助

+0

當我說let pets = new Set([「Cat」,「Dog」,「Hamster」]);這是否意味着寵物具有Set的推斷類型,或者它仍然是任何對象。當你說屬性「物種」,你的意思是物體的屬性不是設置,我說得對嗎?非常感謝您的傑出回答。爲什麼for..in只是「哺乳動物」,爲什麼不是Cat,Dog,Hamster的索引,它是0,1,2。我的參考文獻來自https://www.typescriptlang.org/docs/handbook/iterators-and -generators.html – Gibi

+1

JS exept文字中的一切都是一個對象,甚至是函數,集合也是對象。集恰巧有一組不可枚舉的屬性可以幫助你管理它。 for..in只訪問「物種」,因爲這是屬性名稱,並且是可枚舉的,所以它將被列在..中 –