Проверка, если параметр назначен или нет в JavaScript - PullRequest
1 голос
/ 15 ноября 2011

У меня есть функция с 2 параметрами, она должна работать независимо от того, назначен второй параметр или нет в скобках.По сути, если это назначено, то сделайте что-нибудь, если не сделайте что-то другое или просто не беспокойтесь об этом.

vf.showHide = function (trigger, target) {
    var $trigger = $(trigger),
        trigParent = $trigger.parent(),
        trigDataView = $trigger.data('view'),
        numShown = $trigger.data('showalways'),
        basketSubtotalElem = $('.subtotal .monthlyCost span.price, .subtotal .oneOffCost span.price, .subtotal label h3, .vat *');

    target = target || null; // This is the 2nd parameter but I don't know if this right...

    trigParent.delegate(trigger, 'click', function (e) {
        var elem = $(this);

        target = $(elem.attr('href'));

        e.preventDefault();

        if (trigDataView === 'showhide') {
            if($('.filterBlock')){
                if (target.is(':visible')) {
                    target.hide();
                    elem.find('span').removeClass('minus').addClass('plus');
                } else {
                    target.show();
                    elem.find('span').removeClass('plus').addClass('minus');
                }
            } 
        }
    });
}

Таким образом, если функция вызывается так: vf.showHide('a', 'div') она работает и если она вызывается с одним параметром, таким как: vf.showHide('a'), она все равно должна работать, и выдается ошибка.

Большое спасибо

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

Когда вы вызываете функцию, если вы передаете меньше параметров, чем ожидалось, пропускаемым параметрам присваивается значение undefined. Итак, в вашем случае:

vf.showHide = function(trigger, target) {
    if (target === undefined) {
        //target parameter is not passed any value or passed undefined value
        //add code to process here, e.g. assign target a default value
    }
}

target = target || null: если target оценивается как false, ему присваивается null. Обратите внимание, что пустая строка, нулевое число (0), NaN, undefined, null, false оцениваются как false. Поэтому, пожалуйста, будьте осторожны при написании такого кода.

1 голос
/ 15 ноября 2011

target = target || null будет работать.

То, что вы делаете здесь, - объявляете локальную переменную в области действия функции.

Внутри каждой функции создается локальная переменная, соответствующая имени параметров, для хранения переданного значения,

Если параметры не переданы, они останутся как неопределенная локальная переменная.

function (a, b) {
    //a, b are declared.
} 

то, что делает target = target || null, это просто присвоение значения объявленной локальнойпеременная использует выражение ||:

Значение выражения || определяется по первым возвращаемым операндам true.

true || 2 будет оцениваться как true

false || 2 будет оцениваться как 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...