Установка значения по умолчанию неопределенной переменной в 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
у вас по умолчанию нет доступных методов. Таким образом, вам нужно использовать метод, который может работать с переменной, но не является членом / методом этой переменной.
Попробуйте что-то вроде:
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;
}
Работа выполнена! Вот больше информации о том, как это работает.
Как примечание: ваш прототип не будет работать, потому что вы увеличиваете 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 по параметрам функций по умолчанию.