我是否需要将 null 作为参数传递给 Javascript functions/methods 中的可选参数?

Do I need to pass null as an argument for optional parameters in Javascript functions/methods?

我是否需要将 null 作为可选参数的参数传递?

例如,我包含了 Mongoose 文档中的代码:

Model.find(conditions, [projection], [options], [callback])

// Example use
// passing options and executing immediately
MyModel.find({ name: /john/i }, null, { skip: 10 }, function (err, docs) {});

我已经成功地利用了这个方法和其他类似的方法,没有将 null 作为第二个参数传递,但我想知道这是否会给我带来麻烦?

我找到了一些相关的问题,但它们似乎不是特定于可选参数的。非常感谢任何见解。

要看函数怎么写了

以这个函数为例:

function repeat(value, times) {
  if (arguments.length === 0) {
    value = "Hello!";
    times = 2;
  } else if (arguments.length === 1) {
    if (typeof value === "number") {
      times = value;
      value = "Hello!";
    } else {
      times = 2;
    }
  }
  var output = "";
  for (var i = 0; i < times; i++) {
    output += value + " ";
  }
  return output;
}

console.log(repeat());
console.log(repeat("Yo!"));
console.log(repeat(5));
console.log(repeat("Yo Yo!", 3));

它期望的参数完全不同(在这种情况下,一个是字符串,一个是数字),它可以测试以查看 "first" 参数是否被省略,即使 "second"提供了参数。


您提供的文档说:

Model.find(conditions, [projection], [options], [callback])

最后三个参数中的每一个都显示为独立可选的,这表明您可以省略其中任何一个并仍然提供后面的参数。

the MDN documentation for JSON.stringify相比:

JSON.stringify(value[, replacer[, space]])

第三个参数周围有 [] 表示它是可选的,但它在 内部 [] 周围 第二个 参数。这意味着您只能在提供第二个参数时指定第三个参数。

Quentin 的回答是正确的,我只是想补充一点,在 ES6 中你可以通过 destructuring parameters 避免这种情况。

我举个例子:

let str= "Something";
let num = 10;

doSomething({ str, num });

function doSomething({ somethingElse, num, str }) {
    /* the argument gets passed like 
    { 
        somethingElse: somethingElse, 
        num: num, 
        str: str
    }
    and if any value is missing then it is null, so you can check for
    each property's existance easily
    */
}