问题
Ideally I want to be able to write something like:
function a( b ) {
b.defaultVal( 1 );
return b;
}
The intention of this is that if b
is any defined value, b
will remain as that value; but if b
is undefined, then b
will be set to the value specified in the parameter of defaultVal()
, in this case 1
.
Is this even possible?
Ive been toying about with something like this:
String.prototype.defaultVal=function(valOnUndefined){
if(typeof this==='undefined'){
return valOnUndefined;
}else{
return this;
}
};
But I'm not having any success applying this kind of logic to any variable, particularly undefined variables.
Does anyone have any thoughts on this? Can it be done? Or am I barking up the wrong tree?
回答1:
Well the most important thing to learn here is if a variable is undefined
you, by default, do not have any methods available on it. So you need to use a method that can operate on the variable, but is not a member/method of that variable.
Try something like:
function defaultValue(myVar, defaultVal){
if(typeof myVar === "undefined") myVar = defaultVal;
return myVar;
}
What you're trying to do is the equivalent of this:
undefined.prototype.defaultValue = function(val) { }
...Which for obvious reasons, doesn't work.
回答2:
Why not use the default operator:
function someF(b)
{
b = b || 1;
return b;
}
Job done! Here's more info about how it works.
Just as a side-note: your prototype won't work, because you're augmenting the String
prototype, whereas if your variable is undefined, the String
prototype doesn't exactly apply.
To be absolutely, super-duper-sure that you're only switching to the default value, when b
really is undefined, you could do this:
var someF = (function(undefined)//get the real undefined value
{
return function(b)
{
b = b === undefined ? 1 : b;
return b;
}
})(); // by not passing any arguments
回答3:
While the two answers already provided are correct, the language has progressed since then. If your target browsers support it, you can use default function parameters like this:
function greetMe(greeting = "Hello", name = "World") {
console.log(greeting + ", " + name + "!");
}
greetMe(); // prints "Hello, World!"
greetMe("Howdy", "Tiger"); // prints "Howdy, Tiger!"
Here are the MDN docs on default function parameters.
来源:https://stackoverflow.com/questions/12409813/setting-a-default-value-to-an-undefined-variable-in-javascript