【问题标题】:Default vars in a method? [duplicate]方法中的默认变量? [复制]
【发布时间】:2014-04-24 07:55:27
【问题描述】:

这是我的方法:

p.show = function(message, status, timer){

    //do stuff
};

有没有办法,如果没有传入诸如 timer 之类的变量,可以为它们设置一个默认值,例如 true。

在 php 中我会这样做:

private function show(message, status, timer = true){
}

【问题讨论】:

标签: javascript jquery


【解决方案1】:
p.show = function(message, status, timer){
    timer = (timer !== undefined && timer !== null) ? timer : 60;
};

【讨论】:

  • 如果timer 为零怎么办?
  • 你是对的,这个问题对于计时器值的范围并不是很具体。请参阅编辑。谢谢@Niet
【解决方案2】:

是的,逻辑等效是测试arguments类数组对象的长度:

p.show = function(message, status, timer){
    if (arguments.length < 3 )
        timer = 1000; // default value
    //do stuff
};

如果你想把它设置为默认值即使是手动传入的,但是undefined是传入的值,你也可以使用:

p.show = function(message, status, timer){
    if (timer === undefined)
        timer = 1000;
    //do stuff
};

一种更常见的方法是只使用timer = timer || 1000;,如果它的开头有一个假值,那么它将把计时器设置为1000,所以如果有人没有传入第三个参数,或者如果他们传入0,它仍将设置为1000,但如果他们传入一个真实值,如50 或一个对象,它将保留该值。

在 Javascript (ES6) 的未来版本中,您将能够像过去在 PHP 中一样使用默认参数:

p.show = function(message, status, timer = 1000){
    //do stuff
};

【讨论】:

  • 很好的答案,谢谢!
【解决方案3】:

没有。这必须手动完成:

p.show = function(message, status, timer) {
    if( timer === undefined) timer = true;
}

如果您的函数不期望虚假值,您也可以这样做:

timer = timer || true;
// this is commonly seen in event handlers as e = e || window.event;

【讨论】:

    猜你喜欢
    • 2016-05-31
    • 2013-02-22
    • 2016-06-15
    • 1970-01-01
    • 2011-04-30
    • 2016-08-12
    • 2021-08-26
    • 2011-04-15
    • 1970-01-01
    相关资源
    最近更新 更多