<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); }); Sé que formData.entries() devolverá un iterable, por lo que puedo usar un bucle for of para obtener los pares... Lo que no entiendo es por qué esto realmente funciona:
const pairValues = Object.fromEntries(formData);
formData es una instancia de una clase que TIENE múltiples métodos. No es un iterable en sí mismo.
¿Object.fromEntries busca un iterador por defecto?
Esto se debe a que un objeto FormData tiene un método Symbol.iterator , que lo hace iterable.
Puedes comprobar y ver que:
formData[Symbol.iterator] === formData.entriesSon la misma función.
Ahora Object.fromEntries(form) acepta un iterable, como también documentos mdn :
Parámetros
iterableUn iterable como
ArrayoMapu otros objetos que implementan el protocolo iterable.
Entonces Object.fromEntries invocará formData[Symbol.iterator] , que es lo mismo que llamar a formData.entries .