Javascript! instanceof If 문


186

이것은 실제로 내 호기심을 만족시키기위한 기본적인 질문이지만 다음과 같은 방법이 있습니다.

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

여기서 중요한 것은 NOT! 인스턴스 앞에서. 일반적으로이 설정 방법은 다음과 같습니다.

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

그리고 객체가 특정 유형인지 알고 싶을 때 else 문을 작성 해야하는 것은 약간 성가신 일입니다.

답변:


356

괄호로 묶고 외부를 부정하십시오.

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

이 경우 우선 순위가 중요합니다 ( https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence ). ! 연산자가 instanceof 연산자 앞에옵니다.


9
@ hrishikeshp19-나는 당신이 파 렌스가 필요하다고 확신합니다. 크롬, IE 및 노드에서 방금 시도했으며 각 호스트가 필요했습니다.
Marcus 교황

1
@ riship89 parens가 필요합니다. 증거 : !! obj instanceof Arrayfalse를 !!(obj instanceof Array)반환합니다 ( 올바르지 않음), true 를 반환 함 (올바름)
zamnuts

10
그 이유는! obj가 if (! obj instanceof Array)에서 먼저 평가되어 true (또는 false)로 평가 된 다음 if (bool instanceof Array)가되는 것입니다. 따라서 제안한대로 괄호로 묶습니다.
ronnbot

1
이 이유는 실제로 답변의 일부 여야합니다. 그렇지 않으면이 답변이 아래 Chris의 답변보다 낫지 않습니다. @SergioTulentsev, 당신은 너무 친절하고 다음과 같은 것을 추가 할 것입니다 : In this case, the order of precedence is important (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Operator_Precedence). The ! operator precedes the instanceof operator. 귀하의 답변에?
user0800

73
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연산자. 따라서 먼저 !obj평가됩니다 false(와 동일 함 ! Boolean(obj)). 그렇다면 당신 false instanceof Array은 분명히 부정적 인지 여부를 테스트하고 있습니다.

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

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

이것은 구문 오류입니다. 이러한 운영자는 !=등호에 적용되지는 대조적으로, 하나의 연산자이다. 연산자가없는 것과 !instanceof같은 방식으로 !<연산자 가 없습니다 .


NB. 나는 이것이 정확하기 때문에 Sergio의 답변에 대해 이것을 언급했을 것입니다.
chrismichaelscott

5
Explain 스 만 답변 (이 같은) 문제로는 ... 인정받을한다
로버트 ROSSMANN을

@ chrismichaelscott 내 의견으로는, 나는 혼자가 아니라고 확신합니다. 당신과 같은 대답은 여기에 질문을하는 사람이 가장 원하는 것입니다. 현재까지의 문제를 해결하기에 충분한 정보와 예제를 공유하고 있습니다. 고마워 그리고 나는 당신이 평판을받을 가치가 있다고 생각합니다.
cram2208

42

괄호 (괄호)를 잊어 버리면 다음과 같은 습관을 들일 수 있습니다.

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
}

여기 사용해보십시오


7
그것은 실제로 나에게 부정보다 깨끗해 보입니다.
Kamil Latosinski
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.