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))
logs
true
是的,这要看情况而定,但我的想法更一般。将其设置为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;
}