Estoy tratando de verificar la clave y el valor de cada entrada de un objeto en una condición if, pero no puedo entender mi resultado. ¿Cuál es el problema? ¿Por qué un indefinido no es falso con "??" ?
const object = {undefined: "foo", B: "Bazz"} console.log(Object.entries(object).every(([key, value]) => !!key && !!value)) //true const object2 = {undefined: null, B: "Bazz"} console.log(Object.entries(object2).every(([key, value]) => !!key && !!value)) //falseEn realidad, no puede establecer la clave en undefined . Cuando haces { undefined: "foo" } , en realidad estás configurando la clave para la cadena "undefined" . Es esencialmente lo mismo que { "undefined": "foo" }
!!"undefined" && !!"foo" => true && true => true porque las cadenas no vacías son verdaderas
!!"undefined" && !!null => true && false => false porque null es falso
Los nombres de propiedad de los objetos son cadenas o Symbol . Para verificar el valor, puede tomar una matriz de cadenas no deseadas y verificar con includes .
const check = object => Object .entries(object) .every(([key, value]) => !['', 'null', 'undefined'].includes(key) && value); console.log(check({ a: "foo", B: "Bazz" })); console.log(check({ undefined: "foo", B: "Bazz" })); console.log(check({ undefined: null, B: "Bazz" }));