Object.fromEntries 更可靠,因其原生匹配 FormData 迭代规范,不丢键、不误转类型、保留最后重复键;但多选 checkbox 需用 getAll 手动处理,File 字段经 JSON.stringify 会消失,故文件上传应直接提交 FormData。 Object.from
Object.fromEntries 更可靠,因其原生匹配 FormData 迭代规范,不丢键、不误转类型、保留最后重复键;但多选 checkbox 需用 getAll 手动处理,File 字段经 JSON.stringify 会消失,故文件上传应直接提交 FormData。

核心原因在于 FormData 的 entries() 方法原生支持键值对迭代,而 Object.fromEntries 正是为此场景设计。它不会遗漏任何键,不会将布尔值或数字误转为字符串,重复键仅保留最后一个(通常符合预期行为),且能直接处理 File 对象——当然,序列化时需另行处理。相比之下,手动使用 for...of 或 Array.from 配合 reduce 的写法,稍有不慎就会丢失 undefined 值,或将 File 当作普通字符串序列化,埋下隐患。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
转换后 File 字段会保留为 File 实例对象,问题出现在 JSON.stringify 步骤——由于 File 不可枚举且无可序列化的自有属性,该字段在序列化时直接消失。这不是 Object.fromEntries 的缺陷,而是 JSON 序列化本身的限制:
const data = new FormData();
data.append('avatar', new File([''], 'test.jpg', {type: 'image/jpeg'}));
data.append('name', 'Alice');
const obj = Object.fromEntries(data);
console.log(obj.avatar); // File {name: "test.jpg", lastModified: ..., size: 0, type: "image/jpeg"}
console.log(JSON.stringify(obj)); // {"name":"Alice"} ← avatar 消失
浏览器对同名的多选 checkbox 会按顺序多次 append 值,即 FormData.entries() 返回多条相同键的条目。但 Object.fromEntries 仅保留最后一条,导致只拿到最后一个勾选项,不符合预期。
Object.fromEntries 在 IE 中完全不可用,但无需引入整个 core-js。使用一行 reduce 模拟即可:
const fromEntries = (iterable) =>
Array.from(iterable).reduce((obj, [k, v]) => ({ ...obj, [k]: v }), {});
实际开发中,最易忽略的是检查哪些字段应走 JSON、哪些应单独构造 FormData。混用两种提交方式时,字段命名冲突和类型隐式转换才是真正陷阱。提前规划边界,可节省后续大量调试时间。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述