在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:

var a = {};

我该如何检查是否是这种情况?


当前回答

我的看法:

函数isEmpty(obj){return Object.keys(obj).length==0;}变量a={a: 1中,b: 2个}变量b={}console.log(isEmpty(a));//假的console.log(isEmpty(b));//真的

只是,我认为目前并不是所有浏览器都实现Object.keys()。

其他回答

你最想知道的是,在使用对象之前,它是否有财产。因此,不要询问isEmpty,然后总是检查if(!isEmption(obj))之类的否定,你可以只测试对象是否为null,是否有财产

export function hasProperties(obj): boolean {
  return obj && obj.constructor === Object && Object.keys(obj).length >= 1;
}

奇怪的是,我没有遇到一个解决方案来比较对象的值,而不是任何条目的存在(可能我在许多给定的解决方案中都没有找到它)。我想介绍一下如果一个对象的所有值都未定义,则该对象被视为空的情况:

const isObjectEmpty=obj=>Object.values(obj).every(val=>typeof val==“undefined”)console.log(isObjectEmpty({}))//trueconsole.log(isObjectEmpty({foo:undefined,bar:undefine}))//trueconsole.log(isObjectEmpty({foo:false,bar:null}))//false

示例用法

举个例子,我们有一个函数(paintOnCanvas),它从参数(x,y和size)中销毁值。如果所有这些选项都未定义,则它们将被排除在生成的选项集之外。如果不是,它们都包括在内。

function paintOnCanvas ({ brush, x, y, size }) {
  const baseOptions = { brush }
  const areaOptions = { x, y, size }
  const options = isObjectEmpty(areaOptions) ? baseOptions : { ...baseOptions, areaOptions }
  // ...
}

我的看法:

函数isEmpty(obj){return Object.keys(obj).length==0;}变量a={a: 1中,b: 2个}变量b={}console.log(isEmpty(a));//假的console.log(isEmpty(b));//真的

只是,我认为目前并不是所有浏览器都实现Object.keys()。

我真不敢相信,经过两年的js编程,它从来没有点击过空对象和数组都不是假的,最奇怪的是它从来没有让我发现。

如果默认情况下输入为false,或者输入为空对象或数组,则返回true。逆函数是真正的函数

http://codepen.io/synthet1c/pen/pjmoWL

function falsish( obj ){
    if( (typeof obj === 'number' && obj > 0) || obj === true ){
        return false;
    }
    return !!obj
        ? !Object.keys( obj ).length
        : true;
}

function trueish( obj ){
    return !falsish( obj );
}

falsish({})           //=> true
falsish({foo:'bar'})  //=> false
falsish([])           //=> true
falsish(['foo'])      //=> false
falsish(false)        //=> true
falsish(true)         //=> false
// the rest are on codepen

下面的示例显示了如何测试JavaScript对象是否为空,如果我们所说的空是指它没有自己的财产。

该脚本适用于ES6。

常量isEmpty=(obj)=>{如果(obj===空||obj==未定义||Array.isArray(obj)||对象类型!=='对象') {返回true;}return Object.getOwnPropertyNames(obj).length==0;};console.clear();console.log('---');console.log(isEmpty(“”));//真的console.log(isEmpty(33));//真的console.log(isEmpty([]));//真的console.log(isEmpty({}));//真的console.log(isEmpty({length:0,custom_property:[]}));//假的console.log('---');console.log(isEmpty('Hello'));//真的console.log(isEmpty([1,2,3]));//真的console.log(isEmpty({test:1}));//假的console.log(isEmpty({长度:3,自定义属性:[1,2,3]}));//假的console.log('---');console.log(isEmpty(new Date()));//真的console.log(isEmpty(无限));//真的console.log(isEmpty(null));//真的console.log(isEmpty(未定义));//真的