programing

JQuery/Javascript : var가 존재하는지 확인

newsource 2023. 9. 27. 17:58

JQuery/Javascript : var가 존재하는지 확인

중복 가능:
자바스크립트에서 변수가 정의되어 있는지 확인하려면 어떻게 해야 합니까?
자바스크립트에서 null, undefined, blank 변수를 확인할 수 있는 표준 함수가 있습니까?

저는 두 부분으로 나누어서 나오는 대본이 있습니다.

첫 번째 부분은 다음과 같은 변수를 설정합니다.

var pagetype = "textpage";

두 번째 부분은 간단한 if 문장입니다.

if(pagetype == "textpage") {
//do something
};

이제 두번째 부분인 if문이 제 사이트의 모든 페이지에 나타납니다.그러나 var가 선언된 첫번째 부분은 일부 페이지에만 나타납니다.

var가 없는 페이지에서는 자연스럽게 다음과 같은 오류가 발생합니다.

Uncaught ReferenceError: pagetype is not defined

그래서 제 질문은 자바스크립트나 JQ를 사용하여 var가 존재하는지 여부(데이터가 할당되어 있는 경우에만 해당되지 않음)를 탐지할 수 있는 방법이 있습니까?

나는 단지 다른 if문을 사용할 것이라고 상상하고 있습니다. 예를 들어:

if ("a var called pagetypes exists")....

SO에 대해서는 이와 같은 답변이 많을 것으로 생각되지만 여기 있습니다.

if ( typeof pagetype !== 'undefined' && pagetype == 'textpage' ) {
  ...
}

사용가능typeof:

if (typeof pagetype === 'undefined') {
    // pagetype doesn't exist
}

당신의 경우, 그리고 다른 모든 것의 99.9%가elclanrs정답입니다.

근데 왜냐면.undefined만약 누군가가 초기화되지 않은 변수를 테스트한다면, 는 유효한 값입니다.

var pagetype; //== undefined
if (typeof pagetype === 'undefined') //true

변수가 존재하는지 여부를 100% 신뢰할 수 있는 유일한 방법은 예외를 잡는 것입니다.

var exists = false;
try { pagetype; exists = true;} catch(e) {}
if (exists && ...) {}

하지만 난 절대 이런 식으로 쓰지 않을 겁니다.

존재 여부를 검증하기 위한 두 가지 방법이 있습니다.

a."property" in object

이 방법은 프로토타입 체인에 속성이 있는지 확인합니다.

b.object.hasOwnProperty( "property" )

이 메서드는 속성이 있는지 확인하기 위해 프로토타입 체인 위로 올라가는 것이 아니라 메서드를 호출하는 개체에 있어야 합니다.

var x; // variable declared in global scope and now exists

"x" in window; // true
window.hasOwnProperty( "x" ); //true

만약 우리가 다음 식을 사용하여 테스트한다면 false를 반환할 것입니다.

typeof x !== 'undefined'; // false

조건부 진술을 하기 전에 다음과 같은 작업을 수행할 수 있습니다.

var pagetype = pagetype || false;
if (pagetype === 'something') {
    //do stuff
}

try 이외에는 변수가 선언되었는지 여부를 확인할 수 없습니다.신고하지 않은 경우 오류를 발생시킬 수 있습니다.다음과 같은 테스트:

if (typeof varName == 'undefined') 

만일의 경우에는 말하지 않습니다varName는 범위 내의 변수이며, 예를 들어 정의되지 않은 유형의 테스트만 반환됩니다.

var foo;
typeof foo == 'undefined'; // true
typeof bar == 'undefined'; // true

위에서 foo는 선언되었지만 bar는 선언되지 않았다는 것을 알 수 없습니다.다음을 사용하여 전역 변수를 검정할 수 있습니다.in:

var global = this;
...
'bar' in global;  // false

그러나 글로벌 개체는 액세스할 수 있는 유일한 변수 개체*이며, 다른 실행 컨텍스트의 변수 개체에는 액세스할 수 없습니다.

해결책은 항상 적절한 상황에서 변수를 선언하는 것입니다.

  • 전역 개체는 실제로 변수 개체가 아니라 전역 변수와 일치하고 액세스 권한을 제공하는 속성을 가지고 있기 때문에 하나처럼 보일 뿐입니다.

언급URL : https://stackoverflow.com/questions/13944100/jquery-javascript-check-if-var-exists