清理对象的安全方法 (javascript)?

Secure way to sanitize an object (javascript)?

为了避免 JavaScript delete 运算符(参考:https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/delete)我目前正在使用对象解构来摆脱私有属性:

//sample helper-function in ts

const sanitizeUser = (user: User): UserSanitized => {
                const { googleData, ...rest } = user
                return rest
            }

我的问题是,如果 return 值 sanitizeUser 可以安全使用,而不可能恢复 googleData 属性。

您可以确定 sanitizeUser 返回的对象不会有 googleData 属性。 可能 意味着没有办法从那个“经过净化”的对象获得 属性 的值,但这完全取决于 User 对象。如果 User 对象有任何引用它的属性(有时 parent/child 关系就是这种情况),那么 sanitizeUser 返回的经过清理的对象将具有 属性也是 — 而且它仍将引用原始的 User 对象,因此可以通过 属性.

到达 googleData

这是一个使用等效 JavaScript 代码的示例:

const sanitizeUser = (user/*: User*/)/*: UserSanitized*/ => {
    const { googleData, ...rest } = user;
    return rest;
};

const user = {
    googleData: "secret data!",
};
user.self = user;

const sanitized = sanitizeUser(user);
console.log(sanitized.self.googleData); // "secret data!"

但是如果 User 对象没有任何东西(直接或间接)引用回自身,那么不,经过清理的对象很好并且没有办法返回到 googleData 属性来自它。