установка значения по умолчанию для неопределенной переменной в javascript

в идеале я хочу иметь возможность написать что-то вроде:

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 ответов


Ну самое главное, чтобы учиться здесь, если переменная undefined у вас по умолчанию нет доступных методов. Поэтому вам нужно использовать метод, который может работать с переменной, но не является членом/method of этой переменной.

попробуйте что-то вроде:

function defaultValue(myVar, defaultVal){
    if(typeof myVar === "undefined") myVar = defaultVal;
    return myVar;
}

то, что вы пытаетесь сделать, эквивалентно этому:

undefined.prototype.defaultValue = function(val) { }

...Что по очевидным причинам не работает.


почему бы не использовать оператор по умолчанию:

function someF(b)
{
    b = b || 1;
    return b;
}

работу! Вот!--8-->подробнее о том, как он работает.

просто в качестве примечания: ваш прототип не будет работать, потому что вы увеличиваете String прототип, тогда как если ваша переменная не определена, то String прототип не применяется.

чтобы быть абсолютно, супер-пупер-уверен, что вы переключаетесь только на значение по умолчанию, когда 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

хотя два уже представленных ответа верны, с тех пор язык прогрессировал. Если ваша цель браузеры поддерживают можно использовать параметры функции по умолчанию такой:

function greetMe(greeting = "Hello", name = "World") {
  console.log(greeting + ", " + name + "!");
}

greetMe(); // prints "Hello, World!"
greetMe("Howdy", "Tiger"); // prints "Howdy, Tiger!"

здесь являются документами MDN по параметрам функции по умолчанию.