Angular 7 HttpClient.put请求自动移除undefined属性的原因问询
问题原因说明
该现象属于HttpClient的预期正常行为,不存在漏洞,核心逻辑来源于两层约定:
- JSON 原生语法规范不支持
undefined作为合法值,仅兼容null、布尔值、数字、字符串、数组、对象几类数据类型,序列化时遇到undefined默认执行跳过处理 - 绝大多数HttpClient(包括Angular HttpClient、Axios等常见封装)发送JSON请求体前,都会默认调用
JSON.stringify()处理传入的对象,而该方法的原生规则就是会自动忽略值为undefined的对象属性、函数类型属性、Symbol类型属性,最终呈现的效果就等价于该属性被删除。
如果需要在请求体中保留该属性键名,只需将属性值从undefined替换为null即可,序列化后会正常保留键名,值为null符合JSON规范要求。
验证示例
你可以直接在浏览器控制台运行以下代码复现该逻辑:
const demo = { name: "test", age: undefined, gender: null } console.log(JSON.stringify(demo)) // 输出结果为 {"name":"test","gender":null},值为undefined的age属性直接被移除
内容的提问来源于stack exchange,提问作者Sleeper9
相关产品推荐
相关产品推荐

