在节点中,我想测试我赋予函数的变量是否为“某物”。我的意思不是说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
这似乎太冗长了。我认为有一种更简单的方法可以做到这一点。这是一个选项,但可读性较差,我认为仍然太冗长:
function f(v) {
if (v === null) {
return false;
}
if (v.constructor === Array) {
return !!v.length;
}
if (v.constructor === Object) {
return !!Object.keys(v).length;
}
}
我希望可以将其减少到一个。知道我将如何做到吗?
最佳答案
您只能将一种条件用作v && Object.keys(v).length
。它适用于Array
,Object
,String
和null
或undefined
类型。
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
关于javascript - 如果变量是 “something”,如何简化此测试?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51058341/