在Javascript中,无论输入是对象还是数组,如何使用单个条件检查空性

在Javascript中,无论输入是对象还是数组,如何使用单个条件检查空性,javascript,arrays,Javascript,Arrays,我正在编写一个条件语句,如果输入不是空的,则执行该语句,但问题是输入可以是对象或数组 if(response && response.length > 0 ) { // but this failed if response is an object } 所以我在寻找一个条件,在一行中同时检查(对象和数组)。此外,我还检查了数组和对象的typeof 只需检查对象中是否有键 请注意,Object.keys将返回以下内容: {} => [] {a:undefined}

我正在编写一个条件语句,如果输入不是空的,则执行该语句,但问题是输入可以是对象或数组

if(response && response.length > 0 ) {
 // but this failed if response is an object
}
所以我在寻找一个条件,在一行中同时检查(对象和数组)。此外,我还检查了数组和对象的
typeof

只需检查对象中是否有键

请注意,Object.keys将返回以下内容:

{} => []
{a:undefined} => ["a"]
[] => []
["a"] => [0]
"a" => [0] //strings are arraylike
undefined => Error

使用这个简单的解决方案

if(response && Object.keys(response).length > 0) {
 //works for both object and arrays
}
检查此代码段

var obj1={};
变量obj2={
'test1':'test1',
“test2”:“test2”
};
var arr1=[];
var arr2=['a','b','c'];
console.log(obj1&&Object.keys(obj1.length>0);
console.log(obj2&&Object.keys(obj2.length>0);
console.log(arr1&&Object.keys(arr1.length>0);
console.log(arr2&&Object.keys(arr2.length>0);

答案2无法区分数组或对象中的字符串,只需运行以下命令:

let s = 'hello, world';
console.log(Object.keys(s).length); // 12 will be the output
修订内容如下:

if (response instanceof Object && Object.keys(response).length > 0)

不重复的可能重复;我正在寻找单一的对象和数组检查方法检查我的答案。它同时适用于对象和数组如果数组也是一个对象,你可以简单地使用:if(response&&response instanceof object)@XihuaDuan不,问题是如果,当一个对象在一个条件下同时是数组或对象时,他如何检查对象是否为空,但如果数组作为输入呢?@pro.mean
object.keys()
适用于数组。为什么不呢?@AKA Your edit或Your snippet会改变你在这里的陈述。让我们看看,他的答案是第一个,OP要求1个条件,它给出了条件,OP没有指定在没有任何东西的情况下行为应该是什么,Jonas也指定了,但最重要的是,他在这个话题上非常放松,所以他赢得了支持投票;)@icepickle谢谢:)(实际上我一点也不冷静…)为什么需要jquery?这非常简单。但是不需要jQueryNo,这个答案有一个缺陷,它将字符串视为有效的输入。
let s = 'hello, world';
console.log(Object.keys(s).length); // 12 will be the output
if (response instanceof Object && Object.keys(response).length > 0)