2012-12-29 4 views
4

У меня есть следующий код: яваскриптаКак проверить, является ли значение параметра, переданного функции javascript, нулевым?

function changeButtonState(targetSelector, action, iconClass) { 
     var $target = $(targetSelector); 
     var $targetSpan = $(targetSelector + ' span'); 
     $targetSpan.removeClass('sprite-blank').addClass(iconClass); 

Как я могу сделать это так, чтобы $targetSpan.removeClass(..).addClass работать только тогда, когда iconClass имеет значение, когда функция вызывается. Я думаю, что я смущен, я проверяю, определено ли оно или я проверяю, имеет ли он длину 0 или более?

+1

Если вы не передаете параметр, он будет определен, если вы передаете его недействительным, это было бы пустым, если вы передаете селектор JQuery, но не имеют совпадающие элементы в DOM , длина будет равна нулю. – adeneo

ответ

3

Было бы лучше, если вы проверяете для undefined, а также.

function changeButtonState(targetSelector, action, iconClass) {  
    var $target = $(targetSelector); 
    if (typeof iconClass !== "undefined" && iconClass) { 
     var $targetSpan = $(targetSelector + ' span'); 
     $targetSpan.removeClass('sprite-blank').addClass(iconClass); 
    } 
}​ 

Update Несмотря на то, что это очень старый ответ, он по-прежнему актуален. Поэтому я хотел бы обновить свой ответ с улучшенным, основанным на комментарии @ jeremy.

function changeButtonState(targetSelector, action, iconClass) {  
    var $target = $(targetSelector); 
    //this will not throw exception since iconClass is implicitly declared through the input parameter 
    if (iconClass) { 
     var $targetSpan = $(targetSelector + ' span'); 
     $targetSpan.removeClass('sprite-blank').addClass(iconClass); 
    } 
}​ 
+0

'undefined' является ложным, не так ли? – jeremy

+1

Он выкинет исключение «Некачать ReferenceError». Проверьте консоль на этом [скрипке] (http://jsfiddle.net/plsoft/DgfhV/) –

+0

О, ладно, я вижу. – jeremy

1

Это позволит пользователю (скорее всего, вам) указать, хотите ли вы, чтобы он был активным, либо присвоив ему значение ложности, либо истинное значение. Вы также можете проверить, не определено ли это с помощью оператора typeof.

if(iconClass) { 
    $targetSpan.removeClass('sprite-blank').addClass(iconClass); 
} 
+0

Вы упомянули, что я должен сделать чек, чтобы проверить, не определено ли оно, но затем перед тем, как сказать «просто сделать простую логическую проверку». Должен ли я добавить undefined к вашему примеру? –

+0

Я снова отредактировал. Моя первоначальная модификация была вызвана комментариями в сообщении @ jSang – jeremy

+0

Привет, Нил. Я думаю, что ваше редактирование сообщения не работает, поскольку оно выглядит одинаково. Должен ли я проверить неопределенное? –

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