Javascript 此函数(“isEmpty”)是否应检查对象是否没有参数?
我有一个名为Javascript 此函数(“isEmpty”)是否应检查对象是否没有参数?,javascript,function,Javascript,Function,我有一个名为isEmpty的函数。下面是它的样子: /** * Returns true when the argument is empty. * * We define empty as: * - undefined * - null * - a string with length 0 * - an array with length 0 * - an object with no parameters: consider this? **/ function isEm
isEmpty
的函数。下面是它的样子:
/**
* Returns true when the argument is empty.
*
* We define empty as:
* - undefined
* - null
* - a string with length 0
* - an array with length 0
* - an object with no parameters: consider this?
**/
function isEmpty(arg) {
return (arg === null) ||
(arg === undefined) ||
((typeof (arg) === 'string') ? arg.length === 0 : false) ||
((Array.isArray(arg)) ? arg.length === 0 : false);
}
我想知道,当对象没有参数(
{}
)时,返回true是否有用?根据您的用例,如果对象中没有键值对,则可以说对象为空。由于数组也是一个对象,您只需检查typeof arg===“object”
,然后检查通过object.keys()
获得的keys数组的长度。对于空字符串,您也可以将arg与“”进行比较。大概是这样的:
函数为空(arg){
返回值(arg==null)||
(arg==未定义)||
(arg==“”)||
((typeof arg=='object')?object.keys(arg.length==0:false);
}
log(isEmpty(null));
log(isEmpty(未定义));
log(isEmpty([]);
log(isEmpty({}));
console.log(isEmpty(1))代码>它可能被推广到对象是否有(或对于可编辑对象)
函数为空(arg){
对于(arg中的e)返回false;
返回true;
}
log(isEmpty(null),isEmpty(未定义))
log(isEmpty(“”),isEmpty([]),isEmpty({}))
log(isEmpty(0))//不适用于Number、Boolean、Set、Map等。
log(isEmpty(“0”)、isEmpty([0])、isEmpty({0:0}))
答案是否定的。它返回false,例如{}
和{age:67}
如果要检查对象是否没有参数,请使用Object.getOwnPropertyNames()
方法。它比in
循环或keys()
方法中的更安全,因为它检查对象是否只定义了自己的属性(无论其原型属性如何)
如果你想保留你的功能,你可以使用
function isEmpty(arg) {
if(arg === null || typeof arg==='undefined') return true;
if(typeof arg==='string') return !arg.length;
if(arg.constructor.name==='Array') return !arg.length;
if(arg.constructor.name==='Object') return !Object.getOwnPropertyNames(arg).length;
}
你的意思是当一个对象没有键或值时?它不取决于你的用例是什么吗?是的。像让a={};log(isEmpty(a))
logstrue
是的,这要看情况而定,但我的想法更一般。将其设置为true会比设置为false更有用吗?问题似乎不明确。问题不是如何检查空对象,或者如何优化代码。问题是,它是否应该检查空对象,作为“空”的一般概念的一部分,这一概念没有答案,因为这纯粹是一个如何定义和使用函数的问题。
function isEmpty(arg) {
if(arg === null || typeof arg==='undefined') return true;
if(typeof arg==='string') return !arg.length;
if(arg.constructor.name==='Array') return !arg.length;
if(arg.constructor.name==='Object') return !Object.getOwnPropertyNames(arg).length;
}