检查是否在javascript中指定了参数

时间:2011-11-15 15:25:26

标签: javascript jquery parameters

我有一个带有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')它可以工作,如果用1参数调用它:vf.showHide('a')它应该仍然可以工作并抛出错误。

非常感谢

2 个答案:

答案 0 :(得分:2)

调用函数时,如果传递的参数少于预期,则省略的参数将被赋予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),NaNundefinednullfalse将计算为false。所以请小心写下这样的代码。

答案 1 :(得分:1)

target = target || null会奏效。

你在这里做的是在函数范围内声明一个局部变量。

在每个函数中,创建与参数名称对应的局部变量以保存传入的值。

如果未传入参数,则它将保留为“未定义”的局部变量。

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

target = target || null所做的只是为声明的局部变量赋值它使用||表达式:

||表达式的值由第一个操作数返回true确定。

true || 2的价值为true

false || 2的价值为2