當您的整個路徑是靜態的時,如您的myPath = 'directory/file'
示例中,我沒有明顯的優勢,我知道。
但是,如果您要動態構建路徑,則必須使用path.join
等。
一個重要的原因是,與字符串連接不同,path.join
等將防止當其中一個參數不是字符串時的意外行爲。
在JavaScript中,與值相關的錯誤是undefined
是很常見的錯誤。假設你在你的應用中的一些代碼,登錄後用戶重定向到他們的個人資料:
if (success) {
res.redirect(`/users/${params.username}`);
}
看起來不錯,對吧?沒那麼快。事實證明,用戶名屬性實際上是params.userName
,所以你將每個用戶重定向到/users/undefined
。不會拋出錯誤,並且您的單元測試不檢查重定向URL,因此會部署此錯誤。
如果你做了這個:
res.redirect(path.join('/users', params.username));
...它會立即拋出ArgumentError錯誤,單元測試會失敗,錯誤就不會被部署。
這是一個天真的例子嗎?是。是否容易檢查undefined
?是。但是當你養成使用path.join
的習慣時,你不必擔心這一點。你知道,至少你永遠不會意外地在你的路徑中出現undefined
或null
或123
。
它在服務器端更重要。假設你有一個處理文件上傳的應用程序,並且希望用戶上傳去到一個目錄與他們的用戶名以它的名字:
fs.mkdir(`images/${params.username}`, err => {
if (err) { throw new Error('Oops!'); }
fs.writeFile(`images/${params.username}/${params.filename}`, params.filedata, /* ... */);
});
現在你擁有的每用戶上傳的內容被寫入images/undefined
。在有人注意到這個錯誤之前,可能很長時間(以商業術語)。