자바 스크립트에 객체가 있는지 확인


313

JavaScript에서 객체가 있는지 어떻게 확인합니까?

다음과 같이 작동합니다.

if (!null)
   alert("GOT HERE");

그러나 이것은 오류를 발생시킵니다 :

if (!maybeObject)
   alert("GOT HERE");

오류:

maybeObject 정의되지 않았습니다.

답변:


578

typeof정의되지 않은 변수 에서 연산자를 안전하게 사용할 수 있습니다 .

null을 포함하여 값이 할당되면 typeof는 undefined 이외의 값을 반환합니다. typeof는 항상 문자열을 반환합니다.

따라서

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}

73
항상 문자열이라면 !==비교를 위해 실제로 할 수 있어야합니다 .
Micah

9
이 기능은 Javascript의 핵심 기능이므로 오류가 발생하기 쉬운 기본 제공 기능이 없다는 것은 부끄러운 일입니다. 문자열 비교는 컴파일러가 100 %의 오타와 같은 작은 실수를 저지른 시점을 확실하게 알려주지 못하게합니다.
도미

내 경우에는이 객체를 검색하려고하므로 도움이되지 않습니다. 나는 콘솔에서 weltree로 사용할 수있는 솔루션을 원합니다. 객체가 어떤 클릭도없이 domtree에 있는지 확인하십시오.
blamb

@TJCrowder이 예제는 더 이상 액세스 할 수없는 것 같습니다.
Stefan van den Akker

1
@StefanvandenAkker : 잘못된 예제에 대한 링크는 jsbin.com/ibeho3/1 이어야합니다 . 좋은 예는 jsbin.com/ibeho3/2 입니다. (Sadly JSBin은 최신 버전으로 리디렉션하고 사람들은 1 인치 이내에 편집하고 있습니다.)
TJ Crowder

48

여기에는 많은 반 진실이 있기 때문에, 나는 좀 더 명확하게 생각했습니다.

실제로 변수가 존재하는지 정확하게 알 수 없습니다 (매 2 초마다 try-catch 블록으로 줄 바꿈하지 않는 한).

그 이유는 자바 스크립트가이 악명 높은 값을 가지고 있기 때문에 undefined변수가 정의되지 않았거나 존재하지 않는다는 의미는 아닙니다.undefined !== not defined

var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)

따라서 존재하는 변수와 undefined 유형을 보고 할 수없는 다른 변수가 있습니다 .

@Kevin의 오해는 null == undefined. 유형 강제에 의한 것이며, Crockford가 이런 종류의 것을 확신하지 못하는 모든 사람에게 항상 ===거짓 평등 연산자 를 사용 하여 잘못된 값을 테스트하도록 지시 하는 주된 이유 입니다. null !== undefined당신이 기대할 수있는 것을 제공합니다. 또한 foo != null변수가 아니 undefined거나 아닌지 확인하는 효과적인 방법이 될 수 있습니다 null. 물론 가독성에 도움이 될 수 있으므로 명시적일 수 있습니다.

객체가 존재하는지 확인하기 위해 질문을 제한하는 경우 typeof o == "object"배열 객체를 고려하지 않는 경우를 제외하고는 좋은 아이디어 일 수 있습니다.이 유형은 또한 object약간 혼란 스러울 수 있습니다. 그것은 typeof null또한 당신에게 object단순히 잘못된 것을 줄 것입니다.

당신이 정말로주의해야 시원 지역은 typeof, undefined, null, unknown다른 misteries 및 호스트 개체입니다. 그들은 믿을 수 없습니다. 그들은 원하는 거의 모든 더러운 일을 자유롭게 할 수 있습니다. 따라서 존재하지 않을 수도있는 기능을 사용하는 유일한 안전한 방법이므로 기능에주의하십시오. 가능하면 기능을 확인하십시오.


5
정의되지 않은 foo!=null경우 단순히 ReferenceError를 생성합니다 foo. 따라서 typeof예외를 잡을 계획이 아니라면 을 사용하는 것이 좋습니다 .
JAL

1
다시 작성해 드리겠습니다 : undefined !== not defined&&foo != null can be an effective way to check if a variable is neither 'undefined' nor 'null' . 나는 != null그것이 존재하는지 확인하는 것이 좋다고 말하지 않았다 . 문맥에서 벗어난 것입니다. (또한 OP의 질문 주제와 엄격하게 관련되지 않은 부가 정보라고 언급했습니다)
gblazex

2
유형과 정의되지 않은 용어를 다시 혼동합니다 undefined. 그들은 동일하지 않습니다. (note) it can be used !== you should use. 읽는 동안 상식을 사용하십시오. 변수가 선언되고 (매개 변수 목록 또는 다른 곳에서) 값이 있는지 확인하려는 경우 !=null은 완전히 안전합니다. OP가 요청한 것과는 다른 유스 케이스이므로 참고로 소개했습니다. 전체 단락은 @Kevin의 게시물 및 유형 강제 btw에 관한 것입니다. 주의 깊게 읽으면 알 수 있습니다.
gblazex

@JAL 변수가 선언되었음을 알 때 오류가 발생 하지 않는 부분이 없습니다!= null . 이것은 함수 인수를 확인하는 데 매우 유용합니다.var hasValue = function(foo) {return foo != null}
tybro0103

@ tybro0103 사실이지만, 전체 이슈는 "JavaScript에서 객체의 존재를 어떻게 확인합니까?"입니다. 확실하다고 선언 된 경우에는 다른 상황입니다.
JAL

12

당신이 사용할 수있는:

if (typeof objectName == 'object') {
    //do something
}

8

두 가지 방법.

지역 변수의 typeof

typeof를 사용하여 로컬 객체를 테스트 할 수 있습니다.

if (typeof object !== "undefined") {}

글로벌 변수 창

창 개체를 검사하여 전역 개체 (전역 범위에 정의 된 개체)를 테스트 할 수 있습니다.

if (window.FormData) {}


5

"typeof"를 사용할 수 있습니다.

if(typeof maybeObject != "undefined")
    alert("GOT HERE");

4

실은 꽤 오래 전에 열렸습니다. 그 동안 삼항 연산자의 사용법이 가장 간단한 옵션이라고 생각합니다.

maybeObject ? console.log(maybeObject.id) : ""

참의 라인을 따라 뭔가 var maybeObject = typeof maybeObject !== "undefined" ? Chart:false;하지 않을 경우 체크 false.
Hmerman6006

3

난 그냥 작업을 수행하는 데 사용 if(maybeObject)내 자바 스크립트에서 null을 체크한다.

if(maybeObject){
    alert("GOT HERE");
}

따라서 maybeObject-가 객체 인 경우에만 경고가 표시됩니다. 내 사이트에 예가 있습니다.

https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes


문제는 maybeObject 가 선언되지 않았다면 오류를 던질 것입니다. maybeObject가 정의되지 않았습니다
Juanma Menendez

경우 maybeObject입니다 0, 0.0, or ""false로, 그것을 검사
alejandrociatti

3

위의 typeOf 예제를 방금 테스트했지만 아무것도 효과가 없었으므로 대신 이것을 사용했습니다.

    btnAdd = document.getElementById("elementNotLoadedYet");
    if (btnAdd) {
       btnAdd.textContent = "Some text here";
    } else {
      alert("not detected!");
    }


1

객체 / 변수의 존재를 확인하는 것 외에도 "최악의 경우"출력을 제공하거나 적어도 경고로 트랩하여 눈에 띄지 않게 할 수 있습니다.

점검하고, 대안을 제공하며, 오류를 잡는 기능의 예.

function fillForm(obj) {
  try {
    var output;
    output = (typeof obj !== 'undefined') ? obj : '';
    return (output);
  } 
  catch (err) {
    // If an error was thrown, sent it as an alert
    // to help with debugging any problems
    alert(err.toString());
    // If the obj doesn't exist or it's empty 
    // I want to fill the form with ""
    return ('');
  } // catch End
} // fillForm End

내가 전달 한 객체가 x, xm, xm [z] 일 수 있고 xm이 없으면 오류가 발생하여 typeof xm [z] 일 수 있기 때문에 이것을 만들었습니다.

도움이 되길 바랍니다. (BTW, 저는 JS 초보자입니다)


1

나를 위해 이것은 DOM 객체에서 작동했습니다.

if(document.getElementsById('IDname').length != 0 ){
   alert("object exist");
}

1

그것의 존재에 대해서만 관심이 있다면 (선언 되었습니까?), 승인 된 답변으로 충분합니다.

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}

실제 가치에 관심이 있다면 다음을 추가해야합니다.

if (typeof maybeObject != "undefined" && maybeObject != null ) {
   alert("GOT THERE");
}

같이 typeof( null ) == "object"

예 : bar = { x: 1, y: 2, z: null}

typeof( bar.z ) == "object" 
typeof( bar.not_present ) == "undefined" 

이 방법은 당신이 어느 쪽도 없다는 것을 확인 null하거나 undefined, 이후 typeof없는 오류를 않습니다 값이 존재하지 않는 경우 플러스&& 단락, 당신은 런타임 오류가 발생하지 않습니다.

개인적으로 어딘가에 도우미 fn을 추가하는 것이 좋습니다 (그리고 신뢰하지 마십시오 typeof()).

function exists(data){
   data !== null && data !== undefined
}

if( exists( maybeObject ) ){
    alert("Got here!"); 
}

0
if (n === Object(n)) {
   // code
}

5
이 코드 블록은 OP의 질문에 대답 할 수 있지만,이 코드가 질문의 코드와 어떻게 다른지, 변경 한 내용, 변경 한 이유 및 문제를 해결하는 이유를 설명하면이 답변이 훨씬 유용합니다. 다른 사람을 소개하지 않고.
Mifeet


-1

div alignmnt 탭 패널을 사용하여 텍스트 상자 값을 한 프레임으로 설정하여 인라인 프레임으로 설정하십시오. 우선, 값을 설정하기 전에 다음 코드를 사용하거나 사용하지 않는 선택된 탭 패널 프레임을 확인해야합니다.

자바 스크립트 코드 :

/////////////////////////////////////////
<script>

function set_TextID()
            {
                try
                    {
                        if(!parent.frames["entry"])
                            {
                            alert("Frame object not found");    
                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["entry"].document.getElementById("form_id").value=setText;
                            }
                            if(!parent.frames["education"])
                            {
                            alert("Frame object not found");    

                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["education"].document.getElementById("form_id").value=setText;
                            }
                            if(!parent.frames["contact"])
                            {
                            alert("Frame object not found");    

                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["contact"].document.getElementById("form_id").value=setText;
                            }

                        }catch(exception){}
                }

</script>

-1

0과 null은 암시 적 포인터입니다. 화면에 산술, 비교 또는 '0'을 인쇄하지 않으면 실제로 입력 할 필요가 없습니다. 암시 적입니다. 암시 적으로. 같은 이유로 Typeof도 필요하지 않습니다. 손목 시계.

if (obj) console.log ( "exists");

에 대한 요청을 보지 못했거나 요청이 포함되지 않았습니다. 질문에 맞지 않는 추가 콘텐츠를 좋아하는 한. 간단하게하자.


나는 질문에 없는 것을 보았습니다 : if (!maybeObject)-실제로 제목은 반대를 요구합니다.
Armali

-4

가장 쉬운 것 같아요

if(myobject_or_myvar)
    alert('it exists');
else
   alert("what the hell you'll talking about");

-10

또는 독점적 인 exist () 메서드를 대신 사용하여 불가능하다고 생각되는 작업을 수행 할 수 있습니다. 즉 :

상황이 좋아 : exists("blabla"), 심지어 : exists("foreignObject.guessedProperty.guessNext.propertyNeeded")도 가능합니다 ...


4
그리고 그 방법은 어디에 있습니까?
v010dya
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.