I want to pass the value of \'undefined\' on a multiple parameter function but without omitting the parameter.
What do I mean with \"without omitting the paramet
I think the closest you'll get to this is passing null
as a parameter. It's not undefined
, but for most cases it's close enough.
myFunction(undefined,"abc")
should absolutely work, unless someone cruel has redefined undefined
! If you want to be safe, there are dozens of ways to get the undefined value which avoid the assumption that the thing called "undefined" does in fact have the special undefined value:
void 0
var undef; undef
[][0]
{}.foo
// `undef` is guaranteed to have the undefined value within this closure
(function(undef){ undef }())
// this expression evaluates as undefined
(function(){}())
void 0
is the most widely used (compiled CoffeeScript includes this wherever the undefined value is required).
If its possible , could you rearrange the function as myFunction (parm2, parm1)
ie. try to ensure possible undefined parameters are last in the function , this might not work if more parameters are introduced.
The void operator seems to be the most common way to explicitly get undefined
.
You would use it like this in your example:
myFunction(void 0, "abc");
It's also a reliable method for comparing against undefined
that is guarded against undefined
being accidentally overridden in older JavaScript environments:
var x;
if (x === void 0) {
// this will execute
}
Just to give an examples on what @dbrin was explaining, and @alphapilgrim might have wished to check.
simpleFunction({params1:12, params2:"abc"}); //use expected arguments
simpleFunction({params2:"abc"}); //use only one
simpleFunction({params2:"abc", params1:12, iDoNotExist:"I will not be included"}); //use expected arguments in any order
simpleFunction(); //ignore arguments and uses defaults
simpleFunction(2123); //ignores non object arguments
function simpleFunction(someParams){
var myParams = {
params1:null,
params2:"cde" //default value for second parameter
};
simpleExtend(myParams, someParams);
console.log(myParams);
}
//to include in your utilities
function simpleExtend(currentParams, newParams){
if(typeof currentParams !== "undefined" && typeof newParams !== "undefined"){
Object.keys(newParams).forEach(function(key){
if(typeof currentParams[key] !== "undefined"){
currentParams[key] = newParams[key];
}
});
}
}
An easy way of doing this, when acceptable is to pass undefined. But better yet as follows per W3C
Javascript-missing arguments
function myFunction(x, y) {
if (y === undefined) {
y = 0;
}
}