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.