установка значения по умолчанию для неопределенной переменной в 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 по параметрам функции по умолчанию.