为了账号安全,请及时绑定邮箱和手机立即绑定

为JavaScript函数设置默认参数值

为JavaScript函数设置默认参数值

料青山看我应如是 2019-06-12 15:33:06
为JavaScript函数设置默认参数值我希望JavaScript函数具有可选参数,并设置默认值,如果未定义值(如果传递值,则忽略该参数)。在Ruby中,您可以这样做:def read_file(file, delete_after = false)   # codeend这在JavaScript中有效吗?function read_file(file, delete_after = false) {   // Code}
查看完整描述

3 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

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

这分配给delete_after价值delete_after如果不是法尔西值,否则它将分配字符串。"my default here"..要了解更多细节,请查看DougCrocford对该语言的调查,并查看关于运算符的部分.

如果要传递法尔西价值即falsenullundefined0""..如果你需要法尔西中传递的值,则需要使用汤姆·里特的回答.

在向函数处理多个参数时,通常允许使用者在对象中传递参数,然后合并这些值的对象包含函数的默认值。

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

    // rest of code}// simple implementation based on $.extend() from jQueryfunction 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 valueread_file({ file: "my file" });


 // will override default delete_after valueread_file({ file: "my file", delete_after: "my value" });


查看完整回答
反对 回复 2019-06-12
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

我发现像这样简单的东西更简洁和可读性更强。

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


查看完整回答
反对 回复 2019-06-12
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

从…ES-10/ES 2015,默认参数在语言规范中。

function read_file(file, delete_after = false) {
  // Code}

只是起作用了。

参考资料:默认参数-MDN

默认函数参数允许使用默认值初始化形式参数,如果无值未定都通过了。

你也可以模拟缺省命名参数破坏:

// the `= {}` below lets you call the function without any parametersfunction myFor({ start = 5, end = 1, step = -1 } = {}) { // (A)
    // Use the variables `start`, `end` and `step` here
    ···}

ES 2015前,

有很多方法,但这是我最喜欢的方法-它允许你传递任何你想要的,包括假或空。(typeof null == "object")

function foo(a, b) {
  a = typeof a !== 'undefined' ? a : 42;
  b = typeof b !== 'undefined' ? b : 'default_b';
  ...}


查看完整回答
反对 回复 2019-06-12
  • 3 回答
  • 0 关注
  • 631 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信