用剩余运算符剔除敏感字段的核心是结合解构赋值与剩余属性语法,将指定字段(如password、token)单独提取,其余自动聚合成新对象;适用于已知字段名的静态剔除场景。

用剩余运算符剔除敏感字段再传递对象,核心是结合解构赋值与剩余属性语法,把不想传的字段单独提取出来,剩下的自动聚合成新对象。
直接解构剔除指定字段
适用于已知敏感字段名(如 password、token、creditCard)的场景:
const user = {
id: 123,
name: '张三',
email: 'zhang@example.com',
password: '123456',
token: 'abc-xyz-789'
};
// 剔除 password 和 token,其余字段组成 cleanUser
const { password, token, ...cleanUser } = user;
console.log(cleanUser);
// { id: 123, name: '张三', email: 'zhang@example.com' }
// 可直接用于 API 请求等安全传递
fetch('/api/users', {
method: 'POST',
body: JSON.stringify(cleanUser)
});
封装成可复用的剔除函数
当多个地方需剔除不同字段,或字段名动态传入时,可用高阶函数封装:
const omit = (obj, keysToOmit) => {
const keysSet = new Set(keysToOmit);
return Object.keys(obj)
.filter(key => !keysSet.has(key))
.reduce((acc, key) => {
acc[key] = obj[key];
return acc;
}, {});
};
// 使用示例
const cleanUser = omit(user, ['password', 'token', 'creditCard']);
⚠️ 注意:这个写法不是剩余运算符,但更灵活;若坚持用剩余运算符,只能静态解构,无法动态传字段名。
立即学习“Java免费学习笔记(深入)”;
配合函数参数自动净化
在函数定义时直接解构剔除,让调用方无需手动处理:
const sendUserData = ({ password, token, ...data }) => {
// data 已自动剔除敏感字段
return fetch('/api/user', {
method: 'PUT',
body: JSON.stringify(data)
});
};
// 调用时传完整对象,内部自动净化
sendUserData(user);
注意事项和边界情况
- 剩余运算符只作用于对象顶层属性,嵌套对象(如 user.profile.ssn)不会被自动剔除,需额外处理
- 若原对象不含要剔除的字段(如没有 password),解构不会报错,...cleanUser 仍能正确拿到其余字段
- 剩余属性必须放在解构的最后,否则语法错误:
{ ...rest, name } = obj❌ - Symbol 类型键也会被包含在 ...rest 中,但 Object.keys() 不会返回它


















