2009-09-28 12 views
156

Possible en double:
Best way to check for “undefined” in JavaScript?si une variable est définie

Comment puis-je trouver si une variable est définie?

J'ai actuellement:

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

est une propriété de javascript indéfini si n » t besoin d'être entre guillemets. Vous vérifiez si les valeurs sont réellement la chaîne 'non définie'. http://www.w3schools.com/jsref/jsref_undefined.asp – daddywoodland

+2

@daddywoodland: Petit conseil; vous ne devriez pas référencer W3Schools. Ils sont connus pour donner de fausses informations et ne sont pas une bonne ressource à recommander aux autres. – TheCarver

+0

@PaparazzoKid quel est le problème avec W3Schools? Pensez-vous que le lien ci-dessus est incorrect ou avez-vous d'autres exemples? Je trouve la référence utile, évidemment pas aussi autorisée que de creuser à travers un document W3C mais parfois vous avez juste besoin de référence rapide. –

Répondre

-7

Vous pouvez vérifier directement la juste variable. S'il n'est pas défini, il renvoie une valeur .

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() et .text() ne reviendront jamais 'non défini' pour une sélection vide. Il renvoie toujours une chaîne vide (c'est-à-dire ""). .html() renvoie null si l'élément n'existe pas though.You besoin de le faire:

if(page_name != '') 

Pour d'autres variables qui ne viennent pas de quelque chose comme jQuery.val() vous faire si: Il suffit d'utiliser l'opérateur typeof.

+10

si (undefinedVar) va lancer une erreur, mais si (someObj.undefinedProperty) ne le fera pas. Dans ce dernier cas, vous pouvez également ignorer typeof et utiliser === undefined (ou! ==), sans guillemets. – eyelidlessness

+1

Et je vous ai donné +1 pour signaler correctement que les méthodes de jQuery ne retourneront pas indéfini. – eyelidlessness

+0

Ouais. Vous avez raison sur la partie var indéfinie. – 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 
*/ 

Cela évite l'utilisation typeof whatever === "undefined". (De plus, il n'y a pas de concaténation de chaîne.)

+3

Pourquoi éviter 'typeof ...' une bonne chose? – rjmunro

86

if (var === undefined)

ou plus précisément

if (typeof var === 'undefined')

Notez le === est utilisé

+64

Veuillez utiliser 'typeof (var) === 'undefined'' car' undefined' n'est pas une constante dans JavaScript. – JonnyReeves

+26

'typeof' n'est pas une fonction - n'utilisez pas de parenthèses avec elle. – rjmunro

+5

est donc cette réponse valide ou non? confus par les upvotes et les commentaires – Roy

Questions connexes