2010-02-26 4 views
8

아마도 this question의 복제본입니다.자바 퀴즈 : 빈 객체와 동일한 지 확인하십시오.

바보 javascript 질문 : 개체가 emtpy 개체인지 확인하고 싶습니다.

나는 같이 빈 객체 빈 객체 리터럴을 사용하는 결과 개체를 호출 :

var o = {}; 
예상대로

,도 ===== 일, 다음 두 문장으로

alert({}=={}); 
alert({}==={}); 

false를 지정합니다. 하지을 수행하는 것이 표현의

예는 빈 객체로 평가 :

  • 0
  • ""
  • {a:"b"}
  • []
  • new function(){}

빈 개체를 평가하는 가장 짧은 방법은 무엇입니까?

+0

흥미로운 질문을. 나의 선택의 검색 엔진에있는 빠른 꼭지는 실제로 저것이 쉽지 않다는 것을 보여 주었다! 이 스레드는 조금 tho 도움이 될 수 있습니다 : http://stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object-from-json –

답변

14
function isEmpty(o){ 
    for(var i in o){ 
     if(o.hasOwnProperty(i)){ 
      return false; 
     } 
    } 
    return true; 
} 
+1

당신은 몇 초 나를 이길 .... :-) –

+5

http://api.jquery.com/jQuery.isEmptyObject/ – Zac

0

정말 객체가 비어있는 자바 스크립트 객체를 생성하고 내부적으로 자동으로 객체의 constructorprototype 속성을 추가합니다 있는지 확인하는 간단한 방법이 없습니다.

이 같은 자신의 isEmpty() 방법을 만들 수 있습니다 모든 개체는 모든 속성이있는 경우

var obj={} 
Object.prototype.isEmpty = function() { 
    for (var prop in this) { 
     if (this.hasOwnProperty(prop)) return false; 
    } 
    return true; 
}; 
alert(obj.isEmpty()); 

그래서, 다음 개체가 true를 돌려 다른 비어 있지 않습니다.

1

는이 구문

if (a.toSource() === "({})") 

를 사용할 수 있지만이 IE에서 작동하지 않습니다. 아약스 라이브러리 JSON에 "toSource()"메소드 인코딩에 대한 대안으로서 사용될 수있다

,

var o = {}; 
alert($.toJSON(o)=='{}'); // true 

var o = {a:1}; 
alert($.toJSON(o)=='{}'); // false 

JQuery와는 + jquery.json

0
javascript: 
    cs = 'MTobj={ }; JSON.stringify(MTobj)=="{}"'; 
    alert(cs+' is '+eval(cs)); 
    cs = 'MTnot={a:2}; JSON.stringify(MTnot)=="{}"'; 
    alert(cs+' is '+eval(cs)); 

말한다
MTobj={ }; JSON.stringify(MTobj)=="{}" is true 
MTnot={a:2}; JSON.stringify(MTnot)=="{}" is false 

칼슘 망할! 조심해! 가양 성이있을 수 있습니다!객체가 "빈"의 경우

javascript: 
    cs = 'MTobj={ f:function(){} }; JSON.stringify(MTobj)=="{}"'; 
    alert(cs+' is '+eval(cs)); 
    alert("The answer is wrong!!\n\n"+ 
        (cs="JSON.stringify({ f:function(){} })")+ 
          "\n\n returns\n\n"+eval(cs)); 
9

또한 테스트 Object.keys()를 사용할 수 있습니다

if (Object.keys(obj).length === 0) { 
    // "empty" object 
} else { 
    // not empty 
} 
+0

맞아요. IE8에서이 작업을 수행해야하는 사람은 es5-shim 라이브러리를 확인하십시오. – Ventura

+0

이것은 (for ... in) 옵션보다 10 배 느립니다. - http://stackoverflow.com/questions/4994201/is-object-empty?lq=1을 참조하십시오. – davidhadas

관련 문제