Set 在Typescript中的特性

最近在复盘Typescript, 看到 Iterators 时有段很有意思的代码是下面这样的:

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

对于输出的结果,心存疑惑。然后返回去看了ES6中Set的定义,并且查阅了for..in 和 for...of 的区别,才算是明白了为什么结果是上面那样。

首先,对于Set来说,初始化了一个可以迭代的数组,想要在Set里面添加新的元素,Set提供了add方法,比如我们想在Set中添加一个'Duck',那么正确的姿势应该是下面这样的。

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

pets.add("Duck");

[...pets];  // ["Cat", "Dog", "Hamster", "Duck"]

对于我们刚开始的这样操作,species只是作为pets的一个属性被添加了进来,和可迭代的数组属于并列关系。

Set 在Typescript中的特性_第1张图片

理解了这些事情变得就相对简单啦。接下来就是for...in 和 for...of的区别了。

for...in 可以操作任何对象,它返回的是对象的属性(注意!!是key,不是value)。所以返回的当然是"specials"咯。

for...of 关注的是可迭代对象的值。那在开始的实例中,返回的就是初始化可迭代对象的值了。

 

你可能感兴趣的:(web前端,TypeScript)