在javascript中将默认值设置为未定义的变量

时间:2012-09-13 15:31:12

标签: javascript undefined default-value

理想情况下,我希望能够写出类似的内容:

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;
    }
};

但是我没有成功地将这种逻辑应用于任何变量,特别是未定义的变量。

有没有人对此有任何想法?可以吗?还是我在错误的树上吠叫?

3 个答案:

答案 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文档。