选择题1456/1593向对象 person 添加什么时,可以通过执行 [...person] 获得类似 ["Lydia Hallie", 21] 的输出?

1const person = { 2 name: "Lydia Hallie", 3 age: 21 4} 5 6[...person] // ["Lydia Hallie", 21]
难度:
2021-07-02 创建

本题为单选题”

参考答案:

正确选项:B:*[Symbol.iterator]() { for (let x in this) yield this[x] }

对象默认并不是可迭代的。

如果迭代规则被定义,则一个对象是可迭代的(An iterable is an iterable if the iterator protocol is present)。

我们可以通过添加迭代器symbol [Symbol.iterator] 来定义迭代规则,其返回一个 generator 对象,比如说构建一个 generator 函数 *[Symbol.iterator]() {}

如果我们想要返回数组 ["Lydia Hallie", 21]: yield* Object.values(this),这个 generator 函数一定要 yield 对象 person 的 values 。

另外,本题还需要注意的一个点:

  • yield 关键字用来暂停和恢复一个生成器函数(function*)
  • yield* 表达式用于委托给另一个 generator 或可迭代对象。
1const person = { 2 name: 'lzh', 3 age: 21 4} 5 6// 方法一 7person[Symbol.iterator] = function* () { 8 yield* Object.values(this) 9} 10 11// 方法二 12person[Symbol.iterator] = function* () { 13 for (let x in this) { 14 yield this[x] 15 } 16} 17 18console.log([...person]); //['lzh', 21]

最近更新时间:2023-03-03

赞赏支持

预览

题库维护不易,您的支持就是我们最大的动力!