En un proceso de entrevista reciente, me pidieron que escribiera código para una API. NodeJS , v16.14.0 .
Sin embargo, me encontré con un comportamiento muy extraño:
module.exports = { findSomething: (data) => { const keys = Object.keys(data).sort(); let maxObj = null; let maxKey = null; for (let i = 0; i < keys.length; ++i) { let key = keys[i]; const currObj = data[key]; if (maxObj == null || currObj.prop > maxObj.prop) { maxObj = currObj; maxKey = key; } } // Attempt to assign a new property to the object: // Variant 1, causes odd behaviour. maxObj.maxKey = maxKey; // Variant 2, object copy - works OK. let newData = {...maxObj} newData.maxKey = maxKey; return newData; } }Este cambio muy pequeño (Variante 1 en lugar de 2), no dio errores, sin embargo, hizo que la función se comportara de manera muy extraña. a veces produciendo resultados correctos y otras simplemente nada. Esto me llevó a perder un tiempo precioso y, finalmente, me quedé atónito al descubrirlo.
No tengo conocimiento de casos de tal comportamiento. Como quiero aprender de esto y mejorar, ¿sabe por qué podría suceder esto o si me estoy perdiendo algo obvio aquí? Sé que asignar una nueva propiedad a un objeto existente está bien en JavaScript, y todas mis variables estaban dentro del alcance del uso.