2009-09-28 2 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

неопределенный является свойством JavaScript, так Безразлично» t должно быть в кавычках. Вы проверяете, действительно ли значения являются строкой «undefined». http://www.w3schools.com/jsref/jsref_undefined.asp – daddywoodland

+2

@daddywoodland: Маленький совет; вы не должны ссылаться на W3Schools. Они известны тем, что выдают ложную информацию и не являются хорошим ресурсом для рекомендаций другим. – TheCarver

+0

@PaparazzoKid, что не так с W3Schools? Считаете ли вы, что ссылка выше неверна или у вас есть другие примеры? Я нахожу полезную ссылку, очевидно, не столь авторитетной, как копать документ 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() никогда не вернут 'undefined' для пустого выбора. Он всегда возвращает пустую строку (т. Е. ""). .html() возвращает нулевое значение, если элемент не существует though.You нужно сделать:

if(page_name != '') 

Для других переменных, которые не приходят от чего-то вроде jQuery.val() вы могли бы сделать это, хотя:

if(typeof page_name != 'undefined') 

Вам просто нужно использовать оператор typeof.

+10

if (undefinedVar) выдает ошибку, но если (someObj.undefinedProperty) не будет. В последнем случае вы также можете пропустить typeof и использовать === undefined (или! ==) без кавычек. – eyelidlessness

+1

И я дал вам +1 для правильного указания, что методы jQuery не возвращаются неопределенными. – 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

Смежные вопросы