javascript - 可选参数和默认值

标签 javascript

我是 javascript 的新手,以下 2 个函数是否做同样的事情,你会选择一个而不是另一个吗?

var multiply = function(arg1, arg2) {
             arg1 && (arg1 = 0);
             arg2 && (arg2 = 0);
             return arg1*arg2;
          }


var multiply = function(arg1, arg2) {
             arg1 = arg1 || 0;
             arg2 = arg2 || 0;
             return arg1*arg2;
          }

我问的原因是我第一次看到这样的东西

  function(path, limit) {
     var ref = firebaseRef(path);
     limit && (ref = ref.limit(limit)); //if i understood correctly this line does an assignment based on condition without an if statement
     return $firebase(ref);
  }

最佳答案

function(path, limit) {
    var ref = firebaseRef(path);
    limit && (ref = ref.limit(limit));   // Important
    return $firebase(ref);
}

Important那一行,可以这样写

if (limit) {
    ref = ref.limit(limit);
}

但是如果你想像第一种方式那样写,你就可以了,

ref = limit && ref.limit(limit)

这有一个问题,当 limit 为 Falsy 时 && 立即返回 limit 的评估 Falsy 值,因此 ref 现在是 Falsy。我相信你不会想要这个。

归根结底,作为程序员,我们编写的代码的可读性和可维护性很重要。因此,我建议使用明确的 if 检查,我在答案开头提到过。

注意:另外,正如其他人所指出的,第一个multiply应该是这样的

var multiply = function(arg1, arg2) {
    arg1 || (arg1 = 0);
    arg2 || (arg2 = 0);
    return arg1 * arg2;
}

更好的是,我会这样写

var multiply = function(arg1, arg2) {
    return (arg1 || 0) * (arg2 || 0);
}

关于javascript - 可选参数和默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23369362/

相关文章:

javascript - 如何打开文件:///URL Firefox extension developement?的选项卡

javascript - 关闭特定的 XMLHttpRequest

javascript - 使图像轮播平滑淡入淡出

javascript - 实现方向锁定

javascript - 无法获取列表的长度

javascript - 通过附加 Google Analytics 脚本传递 Shopify 全局变量

javascript - 如何 DRY http 成功和错误函数?

javascript - TinyMCE 4 插件 : Can't get tinymce. Editor.getLang() 工作

javascript - 使用 Protractor 获取 ng-repeat 内部的元素

javascript - React/Redux,如何获取用户输入