2009-09-28 7 views
156

가능한 중복 정의 여부 :
Best way to check for “undefined” in JavaScript?변수가

내가 변수가 정의되지 않은 경우 어떻게 찾을 수 있습니까

?

내가 현재 가지고 :

var page_name = $("#pageToEdit :selected").text(); 
var table_name = $("#pageToEdit :selected").val(); 
var optionResult = $("#pageToEditOptions :selected").val(); 

var string = "?z=z"; 
if (page_name != 'undefined') { string += "&page_name=" + page_name; } 
if (table_name != 'undefined') { string += "&table_name=" + table_name; } 
if (optionResult != 'undefined') { string += "&optionResult=" + optionResult; } 
+3

자바 스크립트의 속성은 '매우 아무튼이고 따옴표 안에 있어야합니다. 값이 실제로 '정의되지 않은'문자열인지 확인하려고합니다. http://www.w3schools.com/jsref/jsref_undefined.asp – daddywoodland

+2

@daddywoodland : 약간의 조언; W3Schools를 참조하지 않아야합니다. 그들은 거짓 정보를 제공하는 것으로 알려져 있으며 다른 사람들에게 추천 할만한 좋은 자료가 아닙니다. – TheCarver

+0

@PaparazzoKid W3School의 문제점은 무엇입니까? 위의 링크가 잘못되었다고 생각합니까? 아니면 다른 예가 있습니까? 나는 W3C 문서를 파헤치는 것만 큼 확실하지는 않지만 유용한 참고 자료를 찾는다. 그러나 가끔은 빠른 참조가 필요할 뿐이다. –

답변

-7

당신은 단지 직접 변수를 확인할 수 있습니다. 정의되지 않은 경우 falsy 값을 반환합니다.

var string = "?z=z"; 
if (page_name) { string += "&page_name=" + page_name; } 
if (table_name) { string += "&table_name=" + table_name; } 
if (optionResult) { string += "&optionResult=" + optionResult; } 
278

jQuery.val() 및 .text()는 빈 선택 항목에 대해 '정의되지 않음'을 반환하지 않습니다. 항상 빈 문자열 (예 : '')을 반환합니다. 당신이 비록이 작업을 수행 할 것) jQuery.val (같은에서 제공하지 않는 다른 변수의

if(page_name != '') 

: 요소가 though.You이 할 필요가 존재하지 않는 경우 .html 중에서() null을 반환합니다 :

if(typeof page_name != 'undefined') 

연산자 typeof 만 있으면됩니다.

+10

if (undefinedVar)는 오류를 발생 시키지만 if (someObj.undefinedProperty)는 오류를 발생시키지 않습니다. 후자의 경우, typeof를 건너 뛰고 따옴표없이 === undefined (또는! ==)를 사용할 수도 있습니다. – eyelidlessness

+1

그리고 jQuery의 메서드가 undefined를 반환하지 않는다는 것을 정확하게 지적하기 위해 +1을주었습니다. – eyelidlessness

+0

예. 정의되지 않은 var 부분에 대해 옳았습니다. – ScottyUCSD

3
function my_url (base, opt) 
{ 
    var retval = ["" + base]; 
    retval.push(opt.page_name ? "&page_name=" + opt.page_name : ""); 
    retval.push(opt.table_name ? "&table_name=" + opt.table_name : ""); 
    retval.push(opt.optionResult ? "&optionResult=" + opt.optionResult : ""); 
    return retval.join(""); 
} 

my_url("?z=z", { page_name : "pageX" /* no table_name and optionResult */ }); 

/* Returns: 
    ?z=z&page_name=pageX 
*/ 

typeof whatever === "undefined"를 사용하는 것을 피한다 멀리 얻을 수 있습니다. (또한, 임의의 문자열 결합이 없다.)

+3

'typeof ...'를 피하는 것이 좋은 이유는 무엇입니까? – rjmunro

86

if (var === undefined)

또는 === 사용 더 정확하게

if (typeof var === 'undefined')

참고

정의
+64

'typeof (var) === 'undefined''를 사용하십시오.'undefined'는 JavaScript에서 상수가 아닙니다. – JonnyReeves

+26

'typeof'는 함수가 아닙니다 - 괄호를 사용하지 마십시오. – rjmunro

+5

이 대답은 유효합니까? upvotes 및 코멘트에 의해 혼란 스럽습니다. – Roy