为什么 Object.fromEntries(formData) 有效

Why does Object.fromEntries(formData) work

  1. 我有一个表格。
  2. 我在用户提交时收听。
  3. 我创建了一个新的 FormData 实例 class。
  <form>
    <input type="text" name="username">
    <input type="submit">
  </form>

  const form = document.querySelector('form');
  form.addEventListener('submit', (e) => {
    e.preventDefault();
    const formData = new FormData(form);
  });

我知道 formData.entries() 将 return 一个可迭代的,所以我可以使用 for of 循环来获取对...我不明白的是为什么这实际上作品:

const pairValues = Object.fromEntries(formData);

formData 是具有多个方法的 class 的一个实例。本身不是可迭代对象。

Object.fromEntries 是否默认查找迭代器?

这是因为 FormData 对象有一个 Symbol.iterator 方法,这使得它可以迭代。

你可以查看一下:

formData[Symbol.iterator] === formData.entries

它们是相同的功能。

现在 Object.fromEntries(form) 接受可迭代对象,mdn 文档也是如此:

Parameters

iterable

An iterable such as Array or Map or other objects implementing the iterable protocol.

所以Object.fromEntries会调用formData[Symbol.iterator],这和调用formData.entries.

是一样的