Сокращение кода JavaScript с расширением или т. Д. - PullRequest
0 голосов
/ 01 ноября 2011

У меня есть такая функция:

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

Как я могу написать этот код короче? Я имею в виду с расширением или т. Д.? 1004 *

Ответы [ 3 ]

3 голосов
/ 01 ноября 2011
    var deviceTableGridId = tableGridId || gridId,
        getUrl = url || restUrl;
1 голос
/ 01 ноября 2011
initGrid: function(tableGridId, url) {
    tableGrid = tableGrid || gridId;
    url || (url = restUrl);
    ...
} 

Шаблоны для значений параметров по умолчанию таковы

x = x || someValue;

и

x || (x = someValue);

Обратите внимание на обе проверки, проверьте истинные значения, чтобы они переопределяли false, "", 0 и т. Д.

Если вы хотите что-то более безопасное, попробуйте

x === undefined && (x = someValue);

0 голосов
/ 01 ноября 2011

Оба других решения хороши, когда значения 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;
}

Хотя, надеюсь, вы предпочтете первое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...