【问题标题】:Set in Typescript/ECMAScript characteristic在 Typescript/ECMAScript 特性中设置
【发布时间】:2016-07-22 13:14:53
【问题描述】:

我现在正在学习 Typescript,但在理解文档的某些部分时遇到了一些问题。参考typescript.lang手册上的代码

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 可以用像 'species' pets["species"] = "mammals" 这样的键来设置。我猜默认设置不是键值特性?

以及为什么 for (let pet of pets) 是“Cat”、“Dog”、“Hamster”而不是“mammals”

请帮忙描述一下。非常感谢

【问题讨论】:

  • 这不是向集合添加值的方式。它有一个.add 方法来添加值。

标签: javascript typescript ecmascript-6


【解决方案1】:

Set 是一个可迭代对象,初始数组集是可迭代值,这就是为什么您可以通过 for..of 访问它们的原因。当您说pets["species"]= "mamals" 时,您正在创建一个值为“mamals”的属性“species”,但这不是可迭代值的一部分,这就是为什么您在使用 for..in 时可以看到它。

for..of 将显示可迭代对象的值,而 for..in 将显示对象的属性。我希望这会有所帮助

【讨论】:

  • 当我说 let pets = new Set(["Cat", "Dog", "Hamster"]);这是否意味着 pets 的推断类型为 Set,或者它仍然是任何对象。当您说属性“物种”时,您的意思是对象的属性不是 Set,对吗?非常感谢您的出色回答。为什么 for..in 只是“哺乳动物”,为什么不是 Cat、Dog、Hamster 的索引,即 0、1、2。我的参考来自 typescriptlang.org/docs/handbook/iterators-and-generators.html
  • JS exept 文字中的一切都是对象,甚至函数,集合也是对象。 Set 恰好有一组不可枚举的属性来帮助你管理它。 for..in 只能访问“物种”,因为这是属性名称并且是可枚举的,因此它将由 for..in 列出
猜你喜欢
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 2018-06-30
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
相关资源
最近更新 更多