Skip to content

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

Posted on:2023年3月3日 at 20:23
const person = {
  name: "Lydia Hallie",
  age: 21
}

[...person] // ["Lydia Hallie", 21]

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

如果迭代规则被定义,则一个对象是可迭代的(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 。

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

const person = {
  name: "lzh",
  age: 21,
};

// 方法一
person[Symbol.iterator] = function* () {
  yield* Object.values(this);
};

// 方法二
person[Symbol.iterator] = function* () {
  for (let x in this) {
    yield this[x];
  }
};

console.log([...person]); //['lzh', 21]
原文转自:https://fe.ecool.fun/topic/8313f0e7-db8e-4ecd-bf57-099dca7656fb