关于默认参数的坑

情景:按时间筛选 mongodb 查询结果,两个参数start_timeandend_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);

这时问题就出现了:

  1. 如果从客户端传上来的值为空,start_time 或者 end_time 则为 "" 即空字符
  2. 比如 start_time 我们认为,她最后的值应该为 new Date(0)
  3. 但是她的值为 "" 即空字符串

结论在于,只有参数为 undefined 的时候才会使用默认参数

所以,应该这样使用:

let start_time = 从客户端传上来的开始日期参数 || undefined;
let end_time = 从客户端传上来的结束日期参数 || undefined;
search(start_time, end_time);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,868评论 18 139
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,888评论 0 15
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,268评论 0 4
  • 我不是一个人 故作坚强 我还有你
    董落忧阅读 176评论 0 0
  • 4. 宋亮一连失眠好几天了, 每到零点过后, 他的大脑就准时地 像床头的闹钟一样 滴答滴答地旋转个不停。 滴答, ...
    新观点读书阅读 246评论 0 0