2012-04-27 1 views
2

제목을 명확히하기 위해 객체가 String, Number, Boolean 또는 기타 사전 정의 된 JavaScript 객체가 아닌지 확인하는 방법이 필요합니다. 마음에 오는 한 가지 방법은 이것이다 :Javascript에서 객체가 "custom"인지 어떻게 알 수 있습니까?

if(!typeof myCustomObj == "string" && !typeof myCustomObj == "number" && !typeof myCustomObj == "boolean") { 

내가 myCustomObj이 객체가이 같은 있는지 확인할 수 있습니다 :이 typeof new String("hello world") == "object") 그대로,하지만 원시 값에 대한

if(typeof myCustomObj == "object") { 

이 유일한 작품 참된.

개체가 이 아닌지 여부를 확인하는 신뢰할 수있는 방법은 무엇입니까? 미리 정의 된 JavaScript 개체는 무엇입니까?

+2

가능한 중복을 수행하는 방법이다 [I 자바 스크립트에서 객체의 유형의 이름을 어떻게합니까?] (http://stackoverflow.com/questions/332422/how -do-i-get-the-object-type-in-javascript) 또는 [JS 객체 유형을 확인하는 가장 정확한 방법은 무엇입니까?] (http://stackoverflow.com/questions/7893776/the 가장 정확한 방법 - 체크 - js- 객체 유형) –

+0

이제 막 공정하지 않습니다. 어떻게 객체의 이름을 검사하면 그 유형을 찾는 지 알 수 있습니까? 나는 "get name"을 검색하지 않았을 것이고, "get type"을 검색했을 것입니다. : I –

+0

방금 ​​"javascript type of object"*를 (를) 검색했습니다. –

답변

5

여기가 JQuery와의 jQuery.isPlainObject()

function (obj) { 
    // Must be an Object. 
    // Because of IE, we also have to check the presence of the constructor property. 
    // Make sure that DOM nodes and window objects don't pass through, as well 
    if (!obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow(obj)) { 
     return false; 
    } 

    try { 
     // Not own constructor property must be Object 
     if (obj.constructor && !hasOwn.call(obj, "constructor") && !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) { 
      return false; 
     } 
    } catch(e) { 
     // IE8,9 Will throw exceptions on certain host objects #9897 
     return false; 
    } 

    // Own properties are enumerated firstly, so to speed up, 
    // if last one is own, then all properties are own. 
    var key; 
    for (key in obj) {} 

    return key === undefined || hasOwn.call(obj, key); 
} 
+1

"nodeType"이라는 속성의 단순한 존재로 인해 해당 함수가 false를 반환한다는 것은 꽤 약하다고 생각합니다. (그건 jQuery에 대한 설명이지, 당신의 대답이 아닙니다 :-) – Pointy

+0

이것은 다른 jQuery 함수들, 특히'jQuery.type'을 호출합니다. 그 기능을 파헤 치면 어떤 변화가 있을까요? 감사. –

+1

@ElliotBonneville : [jQuery 소스 뷰어] (http://james.padolsey.com/jquery/#v=1.6.2&fn=jQuery.isPlainObject)를 확인하십시오. 그것은 다른 jQuery 함수에 연결됩니다 : - P –

4

당신은 개체 프로토 타입의 "toString"functon를 사용할 수 있습니다

"[오브젝트 문자열]"또는 "[객체 날짜]"와 같은 답변을 제공
var typ = Object.prototype.toString.call(someTestObject); 

의 내장 유형. 안타깝게도 일반 Object 인스턴스로 생성 된 객체와 생성자로 만들어진 객체간에 구분할 수는 없지만 실제로는 그다지 다르지 않습니다.

+0

안타깝게도 기본 유형과 다른 사용자 정의 속성이있는 일반 Object 인스턴스를 감지해야하므로이 기능이 저에게 맞는지는 알 수 없습니다. –

+0

jQuery 접근법에 대한 대답은 매우 철저합니다. – Pointy

+0

'Object.prototype.toString.call ($())'은'[object Object]'를 반환하지만'$ .isPlainObject ($))'는'false'를 반환합니다. 그냥 FYI :-P +1이 정말 필요하지 않는 한, 대부분의 경우에 작동해야합니다. –

관련 문제