I have a function with 2 parameters, it should work whether a the 2nd parameter is assigned or not in the bracket. Basically, if it’s assigned then do something if not do something else or just don’t bother about it.
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');
}
}
}
});
}
So if the function is called like this: vf.showHide('a', 'div') it works and if it’s called with 1 parameter like this: vf.showHide('a') it’s should still works and error is thrown.
Many thanks
When you invoke a function, if you pass fewer parameters than expected, the parameters you omit are given the
undefinedvalue. So in your case:target = target || null: iftargetis evaluated tofalse, it’s assigned tonull. Take notice that empty string, zero number (0),NaN,undefined,null,falseare evaluated tofalse. So please be careful to write code like that.