情景:按时间筛选 mongodb 查询结果,两个参数start_time
andend_time
,如果不传这两个参数则使用默认值:
start_time = new Date(0); // 时间为 1970年
end_time = new Date(); // 时间为当前时间
使用 javascript 的 ES6 新特性,在方法参数中直接赋默认值:
search(start_time=new Date(0), end_time=new date()) {
... // 查询并返回结果
}
这并没有问题,问题在于使用该方法时传递的参数问题:
let start_time = 从客户端传上来的开始日期参数;
let end_time = 从客户端传上来的结束日期参数;
search(start_time, end_time);
这时问题就出现了:
- 如果从客户端传上来的值为空,start_time 或者 end_time 则为
""
即空字符 - 比如 start_time 我们认为,她最后的值应该为
new Date(0)
- 但是她的值为
""
即空字符串
结论在于,只有参数为 undefined
的时候才会使用默认参数
所以,应该这样使用:
let start_time = 从客户端传上来的开始日期参数 || undefined;
let end_time = 从客户端传上来的结束日期参数 || undefined;
search(start_time, end_time);