빈 JavaScript 객체를 어떻게 테스트합니까? 내 응용 프로그램이 다음과 같은 빈

AJAX 요청 후 때때로 내 응용 프로그램이 다음과 같은 빈 객체를 반환 할 수 있습니다.

var a = {};

그런 경우인지 어떻게 확인할 수 있습니까?



답변

ECMA 5+ :

// because Object.keys(new Date()).length === 0;
// we have to do some additional check
Object.keys(obj).length === 0 && obj.constructor === Object

그러나 이로 인해 불필요한 배열 (반환 값 keys) 이 생성 됩니다.

ECMA 5 이전 :

function isEmpty(obj) {
  for(var prop in obj) {
    if(obj.hasOwnProperty(prop)) {
      return false;
    }
  }

  return JSON.stringify(obj) === JSON.stringify({});
}

jQuery :

jQuery.isEmptyObject({}); // true

lodash :

_.isEmpty({}); // true

밑줄 :

_.isEmpty({}); // true

ek

Hoek.deepEqual({}, {}); // true

ExtJS

Ext.Object.isEmpty({}); // true

AngularJS (버전 1)

angular.equals({}, {}); // true

람다

R.isEmpty({}); // true


답변

이 작업을 수행하는 쉬운 방법은 없습니다. 속성을 명시 적으로 반복해야합니다.

function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }

    return true;
}

경우 인 ECMAScript 5 지원이 가능하며, 당신이 사용할 수있는 Object.keys()대신 :

function isEmpty(obj) {
    return Object.keys(obj).length === 0;
}


답변

동일한 문제가 있지만 jQuery를 사용하는 사용자는 jQuery.isEmptyObject 를 사용할 수 있습니다 .


답변

이것이 내가 선호하는 솔루션입니다.

var obj = {};
return Object.keys(obj).length; //returns 0 if empty or an integer > 0 if non-empty


답변

Underscore.js 를 사용할 수 있습니다 .

_.isEmpty({}); // true


답변

if(Object.getOwnPropertyNames(obj).length === 0){
  //is empty
}

http://bencollier.net/2011/04/javascript-is-an-object-empty/를 참조하십시오


답변

JSON.stringify를 사용하는 것은 어떻습니까? 거의 모든 최신 브라우저에서 사용할 수 있습니다.

function isEmptyObject(obj){
    return JSON.stringify(obj) === '{}';
}