JavaScript에서 정의되지 않은 것이 있는지 테스트


답변:


345

response[0] 이 정의되어 있지 않으면 정의되어 있는지 확인한 다음 해당 속성 제목을 확인하십시오.

if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){
    //Do something
}

20
투표 수에도 불구하고 undefinedJavaScript 키워드가 아니기 때문에 확인을 수행하는 좋은 방법 은 아닙니다 (모두가 생각하는 것처럼 보이지만). 원하는 경우이라는 변수를 만들면 undefined이 검사가 올바르지 않습니다. 올바른 방법은 확인하는 것 (typeof myVar !== 'undefined')입니다.
BadHorsie 2016 년

4
@BadHorsie는 의미가 있습니다. 귀하의 의견으로 답변을 업데이트했습니다.
amosrivera

1
변수가 존재하고 '정의되지 않은'이라는 문자열을 포함하면 어떻게됩니까?
TomeeNS

@BadHorsie 당신의 주장은 가짜입니다. 왜 재정의해야 undefined합니까?
Robert Siemer

@amosrivera 아니오, 그 / 그녀의 의견은 말이되지 않았습니다. 당신은 당신의 대답을 악화시켰다.
Robert Siemer

39

response[0]정의되어 있지 않은지 확인하십시오 .

if(response[0] !== undefined) { ... }

여전히 제목을 명시 적으로 확인해야하는 경우 초기 확인 후 확인하십시오.

if(response[0] !== undefined && response[0].title !== undefined){ ... }

35

위의 다른 모든 코드 예제에서 문제가있었습니다. Chrome에서 이것은 나를 위해 일한 조건이었습니다.

typeof possiblyUndefinedVariable !== "undefined"

다른 브라우저에서 테스트하고 상황이 어떻게 진행되는지 확인해야합니다.


2
동일- undefined문자열이어야한다는 것을 알았 습니다.
20:53에

이것은 크롬의 새로운 것이어야합니다 (크롬 41 기압 승리했습니다). 받아 들여진 대답은 잘 작동했습니다! : P
joe

13

실제로 코드가 작동하지 않도록 Try / Catch 블록으로 둘러싸 야합니다. 이처럼 :

try{
    if(typeof response[0].title !== 'undefined') {
        doSomething();
    }
  }catch(e){
    console.log('responde[0].title is undefined'); 
  }

IE 8을보고 있었고 시도 캐치를해야했습니다.
RonanOD

1
함수가 정의되어 있지
않은지

정의되지 않은 것을 확인하기 위해 오류를 던지는 것은 좋은 해결책이 아닙니다. @amosrivera가 최고의 솔루션입니다.
user3658423

@ user3658423 : 오류가 발생하지 않습니다. 응답이 선언되지 않은 경우 (오류가 발생하기 때문에) 스크립트가 중지되는 것을 방지합니다.
André Luiz

때때로 오류가 도움이 될 수 있습니다. 제안 된 솔루션을 사용하여 doSomething ()에서 예외가 발생하면 "xyz 파일의 123 번 잡히지 않은 예외에 대한 유용한 메시지"대신 콘솔에 "responde [0] .title is undefined"가 표시됩니다. .js ". 결국 두 번째 개발자는 아마도 console.log () 문을 주석 처리하여, 세 번째 개발자가 들어 와서 doSomething () 내에서 발생하는 버그를 수정하기가 더 어려울 것입니다.
Eric Seastrand




0

response[0]실제로 존재 하는지 확인하면 오류가 존재하지 않는 것으로 보입니다.


0

먼저 response[0]정의되지 않았 는지 확인하고 그렇지 않은 경우에만 나머지를 확인하십시오. 즉, 귀하의 경우 response[0]정의되지 않았습니다.


0

나는 7 개월 늦게 여기에 갔다는 것을 알고 있지만이 질문을 발견했으며 흥미로워 보입니다. 브라우저 콘솔에서 시도했습니다.

try{x,true}catch(e){false}

변수 x가 정의되지 않으면 오류가 포착되고 그렇지 않으면 false가되고 true가 아닌 경우 true를 리턴합니다. 따라서 eval 함수를 사용하여 값을 변수로 설정할 수 있습니다

var isxdefined = eval('try{x,true}catch(e){false}')

1
내가 그렇게 말할 수있는 재미있는 방법.
Brandito

0

이러한 답변 중 일부에는 사용 방법에 대한 근본적인 오해가 있습니다 typeof.

잘못된

if (typeof myVar === undefined) {

옳은

if (typeof myVar === 'undefined') {

그 이유는 typeof문자열 을 반환하기 때문입니다 . 따라서 JavaScriptundefined 자체 의 기본 유형 중 하나 인 따옴표로 묶지 않고 "정의되지 않은"문자열을 반환했는지 확인해야합니다 . typeof연산자는 유형의 값을 반환하지 않습니다 undefined.


추가

잘못된 비교를 사용하면 코드가 기술적으로 작동 할 수 있지만 생각한 이유가 아닐 수도 있습니다. undefinedJavaScript 에는 기존 변수 가 없습니다 . 비교할 수있는 일종의 마술 키워드는 아닙니다. 실제로 변수를 호출 undefined하여 원하는 값을 지정할 수 있습니다.

let undefined = 42;

다음은이를 사용하여 첫 번째 방법이 잘못되었음을 증명하는 방법의 예입니다.

https://jsfiddle.net/p6zha5dm/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.