如果变量是"某事",如何简化此测试?

kra*_*r65 2 javascript if-statement node.js

在节点中我想测试我给函数的变量是否是"某事".我的意思是不是null值或empy数组或空对象.所以我写了以下内容,它按预期工作:

function f(v) {
    if (v === null) {
        return false;
    }
    if (v.constructor === Array) {
        if (v.length) {
            return true;
        } else {
            return false;
        }
    }
    if (v.constructor === Object) {
        if (Object.keys(v).length) {
            return true;
        } else {
            return false;
        }
    }
}

f(null);  // false
f([]);  // false
f({}); // false
f([1]); // true
f({a: 1}); // true
Run Code Online (Sandbox Code Playgroud)

这看起来非常冗长.我认为有一种更简单/更简单的方法.这是一个选项,但不太可读,我认为仍然太冗长:

function f(v) {
    if (v === null) {
        return false;
    }
    if (v.constructor === Array) {
        return !!v.length;
    }
    if (v.constructor === Object) {
        return !!Object.keys(v).length;
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望有可能将其减少到一个班轮.知道我怎么能这样做吗?

Ank*_*wal 8

您只能使用一个条件v && Object.keys(v).length.它的工作原理为Array,Object,Stringnullundefined类型.

function f(v){
  v && Object.keys(v).length? console.log('true'): console.log('false');
}
f(null);  // Should be false
f([]);  // Should be false
f({}); // Should be false
f([1]); // Should be true
f({a: 1}); // Should be true
f(''); // Should be false
f('somename'); // Should be true
Run Code Online (Sandbox Code Playgroud)