關于默認參數的坑

情景:按時間篩選 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,973評論 19 139
  • 點擊查看原文 Web SDK 開發手冊 SDK 概述 網易云信 SDK 為 Web 應用提供一個完善的 IM 系統...
    layjoy閱讀 13,945評論 0 15
  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,270評論 0 4
  • 我不是一個人 故作堅強 我還有你
    董落憂閱讀 176評論 0 0
  • 4. 宋亮一連失眠好幾天了, 每到零點過后, 他的大腦就準時地 像床頭的鬧鐘一樣 滴答滴答地旋轉個不停。 滴答, ...
    新觀點讀書閱讀 252評論 0 0