¿Por qué no funciona el operador de eliminación en el objeto req.user?
let test = new Object(req.user); console.log(test.password); // Get correct string delete test.password; console.log(test.password); // Get correct string, but expect undefined let test = {user:"hello", password:"goodbye"}; console.log(test.password); // output is: hello delete test.password; console.log(test.password); // output is: undefined ¿Podría editar publicar un fragmento con una asignación explícita en la parte superior (en lugar de una referencia a req.user , que no podemos reproducir). A ver si el problema se reproduce con eso.
Esta línea solo crea una referencia a un objeto existente:
let test = new Object(req.user);es lo mismo que
let test = req.user;Entonces, si puede o no eliminar test.password depende de si puede o no eliminar req.user.password (es la misma operación). Si req.user.password no es una propiedad escribible, obtendrá el comportamiento que describe.
const req = { user: {} }; Object.defineProperty(req.user, "password", { value: "123456", writable: false }); let test = new Object(req.user); console.log(test.password); // Get correct string delete test.password; console.log(test.password); // Get correct string, but expect undefined const req2 = { user: { password: "123456" } }; let test2 = new Object(req2.user); console.log(test2.password); // Get correct string delete test2.password; console.log(test2.password); // This works as expectedUse new Object() en un objeto existente, en realidad no crea un nuevo objeto. Todo lo que obtienes es una referencia al original.
El objeto original ( req.user ) podría tener el campo de password como parte de su prototipo, y no como una propiedad propia. Eliminarlo del objeto no hace nada, porque no es parte del objeto.
Manifestación:
const base = Object.create({user:"hello", password:"goodbye"}); const test = new Object(base); console.log(test === base); // true - it's the same object console.log({ pass: test.password, ownProp: test.hasOwnProperty('password') }); delete test.password; console.log({ pass: test.password, ownProp: test.hasOwnProperty('password') });