2009-09-28 10 views
156

Mögliche Duplizieren nicht definiert ist:
Best way to check for “undefined” in JavaScript?Ob eine Variable

Wie finde ich, ob eine Variable nicht definiert ist?

Ich habe derzeit:

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

undefiniert ist eine Eigenschaft von JavaScript so doesn‘ t muss in Anführungszeichen stehen. Sie überprüfen, ob die Werte tatsächlich die Zeichenfolge 'undefiniert' sind. http://www.w3schools.com/jsref/jsref_undefined.asp – daddywoodland

+2

@daddywoodland: Kleiner Rat; Sie sollten nicht auf W3Schools verweisen. Sie sind dafür bekannt, falsche Informationen zu geben und sind keine gute Ressource, um sie anderen zu empfehlen. – TheCarver

+0

@PaparazzoKid Was ist los mit W3Schools? Denken Sie, dass der obige Link falsch ist oder haben Sie andere Beispiele? Ich finde das eine nützliche Referenz, offensichtlich nicht so autoritativ wie das Durchsuchen eines W3C-Dokuments, aber manchmal braucht man nur einen schnellen Verweis. –

Antwort

-7

Sie können einfach direkt die Variable überprüfen. Wenn nicht definiert, gibt es einen falsy Wert zurück.

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() und .text() werden nie 'undefined' für eine leere Auswahl zurückgeben. Es gibt immer eine leere Zeichenfolge (d. H. "") Zurück. .html() den Wert null zurück, wenn das Element though.You existiert nicht tun müssen:

if(page_name != '') 

Für andere Variablen, die von so etwas wie jQuery.val nicht kommen() Sie dies allerdings tun würde:

if(typeof page_name != 'undefined') 

Sie müssen nur den Operator typeof verwenden.

+10

if (undefinedVar) wird einen Fehler ausgeben, aber wenn (someObj.undefinedProperty) nicht. Im letzteren Fall können Sie typeof auch überspringen und == undefined (oder! ==) ohne Anführungszeichen verwenden. – eyelidlessness

+1

Und ich gab Ihnen +1, um richtig darauf hinzuweisen, dass die Methoden von jQuery nicht undefiniert zurückgegeben werden. – eyelidlessness

+0

Ja. Sie haben Recht mit dem undefinierten var Teil. – 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 
*/ 

Dies vermeidet die Verwendung typeof whatever === "undefined" wegzukommen. (Auch gibt keine String-Verkettung ist.)

+3

Warum vermeidet 'typeof ...' eine gute Sache? – rjmunro

86

if (var === undefined)

genauer

if (typeof var === 'undefined')

Notiere die === verwendet wird

+64

Bitte verwenden Sie 'typeof (var) === 'undefined'', da' undefined' in JavaScript keine Konstante ist. – JonnyReeves

+26

'typeof' ist keine Funktion - bitte keine Klammern verwenden. – rjmunro

+5

also ist diese Antwort gültig oder nicht? verwirrt durch die upvotes und die Kommentare – Roy

Verwandte Themen