2012-01-16 3 views
107

경우 이것은 나의 호기심을 만족시키기 위해 정말 정말 기본적인 질문이지만,이 같은 것을 할 수있는 방법이있다 :자바 스크립트 instanceof를 문

if(obj !instanceof Array) { 
    //The object is not an instance of Array 
} else { 
    //The object is an instance of Array 
} 
여기

열쇠를를 사용하지 않을 수있는가! 인스턴스 앞.

if(obj instanceof Array) { 
    //Do nothing here 
} else { 
    //The object is not an instance of Array 
    //Perform actions! 
} 

그리고 그 단순히 객체가 특정 유형 있는지 알고 싶을 때 짜증나는 약간은 다른 문을 작성해야합니다 : 일반적으로 내가 이것을 설정해야하는 방식이 같다.

답변

236

괄호로 묶고 바깥 쪽을 반대로합니다. 이미 다른 사람이 대답대로 -

if(!(obj instanceof Array)) { 
    //... 
} 
+8

시도를 - 나는 당신이 parens을 필요로하는지 꽤 확신합니다. 저는 크롬, IE 및 노드에서 그것을 시도했습니다. 그리고 각 호스트는 그들을 필요로했습니다. –

+0

@ riship89 괄호가 필요합니다. obj instanceof Array''는 false를 반환합니다.''!! (obj instanceof Array)''는 true를 반환합니다. (correct) – zamnuts

+8

이유는! obj가 (! obj instanceof Array) true (또는 false). 그러면 (bool instanceof Array) 이는 분명히 false가됩니다. 따라서 제안 된대로 괄호로 묶으십시오. – ronnbot

57
if (!(obj instanceof Array)) { 
    // do something 
} 

이 확인하는 올바른 방법입니다. 제안 된 다른 두 가지 전술은 작동하지 않으므로 이해해야합니다 ...

대괄호가없는 ! 연산자의 경우.

if (!obj instanceof Array) { 
    // do something 
} 

이 경우 우선 순위는 중요합니다 (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence). ! 연산자는 instanceof 연산자 앞에옵니다. 따라서 !objfalse으로 먼저 계산됩니다 (! Boolean(obj)에 해당). 그 다음에 분명히 음수 인 false instanceof Array이 있는지 테스트하고 있습니다.

instanceof 연산자 전에 ! 연산자의 경우.

if (obj !instanceof Array) { 
    // do something 
} 

이것은 구문 오류입니다. !=과 같은 연산자는 단일 연산자이므로 EQUALS에 NOT이 적용됩니다. !< 연산자가없는 것과 같은 방법으로 !instanceof과 같은 연산자가 없습니다.

+0

NB. 나는 이것이 명백하게 정확함에 따라 Sergio의 대답에 대해 논평 할 수 있었을 것이다. 그러나 나는 그렇게 말할 수있는 충분한 평판 포인트를 갖지 못했다. – chrismichaelscott

+4

** 문제의 이유 ** (이 같은)가 받아 들여 져야만하는 이유에 대해 설명하는 대답 만 ... –

+0

@chrismichaelscott 내 의견으로는, 나는 혼자가 아니라고 확신합니다. 당신과 같은 대답이 가장 원하는 것입니다. 누구든지 여기에 질문을합니다.요점은 명확하며, 제시된 문제를 해결할 수있는 충분한 정보와 예제를 공유합니다. 고마워. 그리고 나는 당신이 명성을 얻고 받아 들여진 대답 이었음에 틀림 없다고 생각합니다. – cram2208

18

는 괄호 (대괄호)를 잊기 쉽다 그래서 당신은 일을하는 습관 만들 수 있습니다

if(obj instanceof Array === false) { 
    //The object is not an instance of Array 
} 

또는

if(false === obj instanceof Array) { 
    //The object is not an instance of Array 
} 

이 hrishikeshp19 @ 그것을 here

+0

사실 나를 부정하는 것보다 훨씬 깨끗해 보입니다. –