如果使用 ES6 为 null 或 undefined,如何检查对象的每个键和值?

How check an object's every key and value if null or undefined with ES6?

我试图在 if 条件下检查一个对象的每个条目的键和值,但我无法理解我的结果。问题是什么?为什么 undefined 不是 false with "??" ?

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)) 

//false

您实际上不能将密钥设置为 undefined。当您执行 { undefined: "foo" } 时,您实际上是将密钥设置为字符串 "undefined"。它与 { "undefined": "foo" }

基本相同

!!"undefined" && !!"foo" => true && true => true 因为非空字符串是真实的

!!"undefined" && !!null => true && false => false 因为 null 是假的

对象的属性名称是字符串或Symbol。要检查该值,您可以获取不需要的字符串数组并使用 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" }));