当您的整个路径是静态的时,如您的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
。在有人注意到这个错误之前,可能很长时间(以商业术语)。