function isEmpty(obj) { for(var key in obj) { return false; } return true; }¿Qué tiene de malo esta forma de verificar si un objeto está vacío? Soy bastante nuevo en JS y estoy revisando SO para verificar cuál es la mejor y más rápida forma de verificar si un objeto está vacío y encontré esto ¿Cómo pruebo si hay un objeto JavaScript vacío? entre otros.
Todas las preguntas tienen respuestas similares al verificar Object.prototype.hasOwnProperty , lo que parece innecesariamente complicado. ¿Hay algún caso de uso en el que el código que proporcioné no funcione y deba usar las respuestas proporcionadas en las preguntas vinculadas?
Considere el siguiente caso:
const foo = { a: 1 } const bar = {} Object.setPrototypeOf(bar, foo) console.log(bar) // {} for (let key in bar) console.log(key) // logs a!!Eso es lo que quise decir en el comentario sobre caminar por la cadena de prototipos.
Considera también esto:
const foo = {} Object.defineProperty(foo, 'a', { enumerable: false, value: 1, }) console.log(foo.a) // 1 for (let key in foo) console.log(key) // doesn't log anything!Así que esos son dos casos extremos que su función pierde. Probablemente no desee registrar nada en el primer ejemplo y probablemente desee registrar la clave en el segundo.