변수가 정의되어 있는지 확인하고 싶었습니다. 예를 들어 다음은 정의되지 않은 오류를 발생시킵니다.
alert( x );
이 오류를 어떻게 잡을 수 있습니까?
변수가 정의되어 있는지 확인하고 싶었습니다. 예를 들어 다음은 정의되지 않은 오류를 발생시킵니다.
alert( x );
이 오류를 어떻게 잡을 수 있습니까?
답변:
JavaScript에서 null
객체입니다. 존재하지 않는 것에는 또 다른 가치가 있습니다 undefined
. DOM은 null
문서에서 일부 구조를 찾지 못하는 거의 모든 경우에 대해 반환 하지만 JavaScript 자체에서 undefined
사용되는 값입니다.
둘째, 아닙니다. 직접적으로 동등한 것은 없습니다. 에 대해 구체적으로 확인하려면 다음을 null
수행하십시오.
if (yourvar === null) // Does not execute if yourvar is `undefined`
변수가 존재하는지 확인하려면 try
/ 로만 수행 할 수 있습니다 . 선언되지 않은 변수와 값이 같은 것으로 선언 된 변수를 처리하기 catch
때문 typeof
입니다 undefined
.
하지만, 변수가 선언 된 경우 확인 및 되지 않습니다 undefined
:
if (yourvar !== undefined) // Any scope
이전 에는 변수처럼 typeof
재 할당 할 수 있었으므로 연산자 를 사용하여 정의되지 않은 안전을 검사해야했습니다 undefined
. 옛날 방식은 다음과 같습니다.
if (typeof yourvar !== 'undefined') // Any scope
undefined
재 할당 할 수 있는 문제는 2009 년에 릴리스 된 ECMAScript 5에서 수정되었습니다. 이제 한동안 읽기 전용 이므로 사용하지 않고도 안전하게 사용 ===
하고 !==
테스트 할 수 있습니다 .undefined
typeof
undefined
멤버가 독립적으로 존재하지만 그 가치가 무엇인지 신경 쓰지 않으려면 다음을 수행하십시오.
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
if (yourvar)
변수가 실제로 있는지 테스트하는 유일한 방법 undefined
은 다음을 수행하는 것입니다. undefined는 JavaScript의 객체입니다.
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
이 스레드의 다른 솔루션 중 일부는 변수가 정의되어 있어도 (예 : NULL 또는 0의 값으로) 정의되지 않았다고 생각하게합니다.
ReferenceError
.
undefined
자바 스크립트의 객체는 잘못된 정보 라고 생각 합니다. 이 진술은 어쨌든 귀하의 답변과 관련이 있습니까? 이름이 전역 식별자에 지정된 undefined
유형 의 값 입니다 . undefined
undefined
undefined
ES5 이후로 읽기 전용입니다. 다음 if (x === undefined) {...}
과 같이 속기를 사용 하거나 사용하여 정의되지 않은 테스트를 안전하게 테스트 할 수 있습니다 if (x === void 0)
.
기술적으로 올바른 해결책은 다음과 같습니다.
typeof x === "undefined"
때로는 게으르고 사용할 수 있습니다
x == null
그러나 정의되지 않은 변수 x와 null을 포함하는 변수 x가 모두 true를 반환하도록 허용합니다.
var x;
다음 과 같은 방식으로 typeof x;
얻을 수 "undefined"
있습니다typeof lakjdflkdsjflsj;
더 쉽고 짧은 축약 형은 다음과 같습니다.
if (!x) {
//Undefined
}
또는
if (typeof x !== "undefined") {
//Do something since x is defined.
}
나는 종종 했어요 :
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
삼항 조건 연산자를 사용할 수도 있습니다.
var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
//var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
var a = false;
? 당신은 확인해야하는 경우 a===undefined
대신
var x;
위의 작업을 수행하면 오류가 발생합니다
!a
대해 true를 테스트 undefined
할뿐만 아니라 0
and null
및에 대해서도 true를 테스트합니다 false
. 이것은 매우 올바르지 않으므로 제거해야합니다.
나는 종종 가장 간단한 방법을 사용합니다.
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
편집하다:
변수를 초기화하지 않으면 "Uncaught ReferenceError : variable is not defined ..."예외가 발생합니다.
Uncaught ReferenceError: variable is not defined
variable
에 의해 정의됩니다 var variable;
. 이 스 니펫은 variable
로컬 범위에서 재정의 됩니다. 클로저 또는 전역 변수에 액세스 할 것으로 예상되는 논리를 깨뜨릴 수 있습니다. 즉 :var variable = 1; function test() { var variable; if (variable === undefined){ console.log('Variable is undefined'); } else { console.log('Variable is defined: ' + variable); } } test(); // Variable is undefined
또 다른 잠재적 인 "솔루션"은 window
객체 를 사용하는 것입니다. 브라우저에있을 때 참조 오류 문제를 피합니다.
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
undefined
. 그렇지 않습니다.
x
존재하지 않는 오류는 오류입니다 ! 값 이 지정 되지 않은으로 선언 되지 않았습니다 .
var x; // declaration
x = 2; // assignment
을 선언 x
하면 오류가 발생하지 않습니다. 존재 / 선언 되었으나 값이 지정되지 undefined
않았기 때문에 경고 x
가 표시됩니다.
변수가 선언되었는지 확인하려면을 사용할 수 있습니다 typeof
. 변수가 있는지 확인하는 다른 방법은 처음에 얻은 것과 동일한 오류를 발생시킵니다.
if(typeof x !== "undefined") {
alert(x);
}
에 저장된 값의 유형을 확인하고 x
있습니다. 그것은 단지 반환 undefined
할 때 x
이 경우 선언되지 않았거나 있다 선언 아직 할당되지 않았습니다.
typeof
연산자 가 필요하지 않습니다 .
void
운영자 반환 undefined
, 인수 / 표현은 전달. 결과에 대해 테스트 할 수 있습니다 (실제로 일부 축소 프로그램은 코드를 undefined
에서void 0
문자의 몇 가지를 저장)
예를 들면 다음과 같습니다.
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeof
사고 undefined
를 재 할당 할 수 있으며, 약 10 년 동안 가능하지 않았습니다.
undefined
, 하나님은 어떤 이유 만 알기 때문에 사용 void 0
은 항상 undefined
상관없이 돌아올 것 입니다.
허용 된 답변이 맞습니다. 옵션을 하나 더 추가하고 싶었습니다. try ... catch
블록을 사용하여이 상황을 처리 할 수도 있습니다 . 이상한 예 :
var a;
try {
a = b + 1; // throws ReferenceError if b is not defined
}
catch (e) {
a = 1; // apply some default behavior in case of error
}
finally {
a = a || 0; // normalize the result in any case
}
catch
블록 수준 범위를 생성하므로 약간 지저분한 블록을 알고 있어야 합니다. 물론 예는 질문에 대답하기 위해 매우 단순화되어 있으며 오류 처리의 모범 사례는 다루지 않습니다.
작은 함수를 사용하여 변수가 선언되었는지 확인하여 실제로 자바 스크립트 파일의 혼란을 줄입니다. 변수의 존재 여부뿐만 아니라 값이 할당되었는지 확인하기 위해 값 검사를 추가합니다. 두 번째 조건은 변수가 인스턴스화되었는지 여부를 확인합니다. 변수가 정의되었지만 인스턴스화되지 않은 경우 (아래 예 참조) 코드에서 값을 참조하려고하면 여전히 오류가 발생합니다.
인스턴스화되지 않음- var my_variable;
인스턴스화 됨-var my_variable = "";
function varExists(el) {
if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) {
return true;
} else {
return false;
}
}
그런 다음 조건문을 사용하여 변수가 다음과 같이 정의되고 인스턴스화되었는지 테스트 할 수 있습니다.
if ( varExists(variable_name) ) { // checks that it DOES exist }
또는 정의되고 인스턴스화되지 않은지 테스트하기 위해 ...
if( !varExists(variable_name) ) { // checks that it DOESN'T exist }
return typeof el !== "undefined" && typeof el.val() !== "undefined"