情景:按時間篩選 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);