변수가 정의되어 있는지 확인하고 싶었습니다. 예를 들어 다음은 정의되지 않은 오류를 발생시킵니다.
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에서 수정되었습니다. 이제 한동안 읽기 전용 이므로 사용하지 않고도 안전하게 사용 ===하고 !==테스트 할 수 있습니다 .undefinedtypeofundefined
멤버가 독립적으로 존재하지만 그 가치가 무엇인지 신경 쓰지 않으려면 다음을 수행하십시오.
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유형 의 값 입니다 . undefinedundefined
undefinedES5 이후로 읽기 전용입니다. 다음 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할뿐만 아니라 0and 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"