我是否需要将 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
*/
}
我是否需要将 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
*/
}