#javascript #extend
#javascript #расширить
Вопрос:
У меня есть такая функция:
initGrid: function(tableGridId, url) {
var deviceTableGridId;
if (typeof tableGridId != "undefined"){
deviceTableGridId = tableGridId;
} else {
deviceTableGridId = gridId;
}
var getUrl;
if (typeof url != "undefined"){
getUrl = url;
} else {
getUrl = restUrl;
}
..
}
Как я могу написать этот код короче? Я имею в виду с помощью extend или etc.?
Ответ №1:
var deviceTableGridId = tableGridId || gridId,
getUrl = url || restUrl;
Ответ №2:
initGrid: function(tableGridId, url) {
tableGrid = tableGrid || gridId;
url || (url = restUrl);
...
}
Шаблоны для значений параметров по умолчанию как таковые
x = x || someValue;
и
x || (x = someValue);
Обратите внимание на обе проверки, проверьте истинность значений, чтобы они переопределяли false
, ""
, 0
, и т.д.
Если вы хотите что-то более безопасное, попробуйте
x === undefined amp;amp; (x = someValue);
Ответ №3:
Оба других решения хороши, когда falsy
значения могут быть исключены из допустимого ввода. Однако, если это невозможно, простая вспомогательная функция все исправит;
function getOrDefault(val, other) {
if (typeof val == "undefined") {
return other;
}
return val;
}
var someVal = getOrDefault(someVar, 4);
var getUrl = getOrDefault(url, restUrl);
Другим подходом было бы;
var someVal = someVar;
if (typeof someVal == "undefined") {
someVal = 4;
}
var getUrl = url;
if (typeof getUrl == "undefined") {
someVal = restUrl;
}
Хотя, надеюсь, вы предпочтете первое решение.