理想情况下,我希望能够写出类似的内容:
function a( b ) {
b.defaultVal( 1 );
return b;
}
这样做的目的是,如果b
是任何定义的值,b
将保留为该值;但如果b
未定义,则b
将设置为参数defaultVal()
中指定的值,在本例中为1
。
这甚至可能吗?
我一直在玩这样的事情:
String.prototype.defaultVal=function(valOnUndefined){
if(typeof this==='undefined'){
return valOnUndefined;
}else{
return this;
}
};
但是我没有成功地将这种逻辑应用于任何变量,特别是未定义的变量。
有没有人对此有任何想法?可以吗?还是我在错误的树上吠叫?
答案 0 :(得分:11)
为什么不使用默认运算符:
function someF(b)
{
b = b || 1;
return b;
}
完成工作!这是关于它如何运作的more info。
正如旁注:您的原型不会起作用,因为您正在扩充String
原型,而如果您的变量未定义,则String
原型不会#&# 39; t完全适用。
绝对是,超级 - 确保您只是切换到默认值,当b
确实未定义时,您可以这样做:
var someF = (function(undefined)//get the real undefined value
{
return function(b)
{
b = b === undefined ? 1 : b;
return b;
}
})(); // by not passing any arguments
答案 1 :(得分:8)
这里要学习的最重要的事情是,如果变量是undefined
,默认情况下,您没有任何可用的方法。所以你需要使用一个可以对变量进行操作的方法,但不是那个变量的成员/方法。
尝试类似:
function defaultValue(myVar, defaultVal){
if(typeof myVar === "undefined") myVar = defaultVal;
return myVar;
}
你要做的就是相当于:
undefined.prototype.defaultValue = function(val) { }
......由于显而易见的原因,这不起作用。
答案 2 :(得分:1)
虽然已经提供的两个答案是正确的,但语言已经取得了进展。如果你的目标是browsers support,你可以使用默认函数参数,如下所示:
function greetMe(greeting = "Hello", name = "World") {
console.log(greeting + ", " + name + "!");
}
greetMe(); // prints "Hello, World!"
greetMe("Howdy", "Tiger"); // prints "Howdy, Tiger!"
Here是默认函数参数的MDN文档。