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

Подтверждает Эндрю Мур за его ответ, я просто форматирую его, потому что он не компилировался в C # 3.5.

private string GetUserName(string procName)
{
    string query = "SELECT * FROM Win32_Process WHERE Name = \'" + procName + "\'";
    var procs = new System.Management.ManagementObjectSearcher(query);
    foreach (System.Management.ManagementObject p in procs.Get())
    {
        var path = p["ExecutablePath"];
        if (path != null)
        {
            string executablePath = path.ToString();
            string[] ownerInfo = new string[2];
            p.InvokeMethod("GetOwner", (object[])ownerInfo);
            return ownerInfo[0];
        }
    }
    return null;
}
2243
задан Filipp W. 17 May 2019 в 04:29
поделиться

4 ответа

function read_file(file, delete_after) {
    delete_after = delete_after || "my default here";
    //rest of code
}

Присваивает delete_after значение delete_after , если это не значение falsey , в противном случае присваивается строка "здесь мой по умолчанию" . Для получения более подробной информации ознакомьтесь с обзором языка Дуга Крокфорда и ознакомьтесь с разделом, посвященным операторам .

Этот подход не работает, если вы хотите передать значение falsey , т.е. false , null , undefined , 0 или "" . Если вам требуется передать значения falsey , вам нужно будет использовать метод из ответа Тома Риттера .

При работе с несколькими параметрами функции, ( typeof null == "объект" )

function foo(a, b) {
  a = typeof a !== 'undefined' ? a : 42;
  b = typeof b !== 'undefined' ? b : 'default_b';
  ...
}
3208
ответ дан 22 November 2019 в 19:55
поделиться

Звуки будущего

В будущем, Вы сможете "распространить" один объект другому (в настоящее время по состоянию на 2019 НЕ поддерживаемый Краем !) - демонстрация, как использовать это для хороших опций по умолчанию независимо от порядка:

function test(options) {
    var options = {
       // defaults
       url: 'defaultURL',
       some: 'somethingDefault',
       // override with input options
       ...options
    };
    
    var body = document.getElementsByTagName('body')[0];
    body.innerHTML += '<br>' + options.url + ' : ' + options.some;
}
test();
test({});
test({url:'myURL'});
test({some:'somethingOfMine'});
test({url:'overrideURL', some:'andSomething'});
test({url:'overrideURL', some:'andSomething', extra:'noProblem'});

ссылка MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

... между тем, что ДЕЙСТВИТЕЛЬНО поддерживает Край, является Object.assign () (IE не делает, но я действительно надеюсь, что мы можем оставить IE :))

Так же, Вы могли сделать

    function test(options) {
        var options = Object.assign({
           // defaults
           url: 'defaultURL',
           some: 'somethingDefault',
        }, options); // override with input options
        
        var body = document.getElementsByTagName('body')[0];
        body.innerHTML += '<br>' + options.url + ' : ' + options.some;
    }
    test();
    test({});
    test({url:'myURL'});
    test({some:'somethingOfMine'});
    test({url:'overrideURL', some:'andSomething'});
    test({url:'overrideURL', some:'andSomething', extra:'noProblem'});
0
ответ дан 22 November 2019 в 19:55
поделиться

I find something simple like this to be much more concise and readable personally.

function pick(arg, def) {
   return (typeof arg == 'undefined' ? def : arg);
}

function myFunc(x) {
  x = pick(x, 'my default');
} 
144
ответ дан 22 November 2019 в 19:55
поделиться
function read_file(file, delete_after) {
    delete_after = delete_after || "my default here";
    //rest of code
}

Присваивает delete_after значение delete_after , если это не значение falsey , в противном случае присваивается строка "здесь мой по умолчанию" . Для получения дополнительных сведений ознакомьтесь с обзором языка Дуга Крокфорда и ознакомьтесь с разделом, посвященным операторам .

Этот подход не работает, если вы хотите передать значение falsey , т.е. false , null , undefined , 0 или "" . Если вам требуется передать значения falsey , вам нужно будет использовать метод из ответа Тома Риттера .

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

function read_file(values) {
    values = merge({ 
        delete_after : "my default here"
    }, values || {});

    // rest of code
}

// simple implementation based on $.extend() from jQuery
function merge() {
    var obj, name, copy,
        target = arguments[0] || {},
        i = 1,
        length = arguments.length;

    for (; i < length; i++) {
        if ((obj = arguments[i]) != null) {
            for (name in obj) {
                copy = obj[name];

                if (target === copy) {
                    continue;
                }
                else if (copy !== undefined) {
                    target[name] = copy;
                }
            }
        }
    }

    return target;
};

, чтобы использовать

// will use the default delete_after value
read_file({ file: "my file" }); 

// will override default delete_after value
read_file({ file: "my file", delete_after: "my value" }); 
590
ответ дан 22 November 2019 в 19:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: