2016-07-22 110 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只访问“物种”,因为这是属性名称,并且是可枚举的,所以它将被列在..中 –