根据文档:
path.join()方法使用以下方法将所有给定的路径段连接在一起 平台特定的分隔符作为分隔符,然后将 产生的路径。
零长度路径段被忽略。如果连接的路径字符串是一个 零长度字符串,然后是“。”将返回,代表当前 工作目录。
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..'); // Returns: '/foo/bar/baz/asdf' path.join('foo', {}, 'bar'); // Throws 'TypeError: Path must be a string. Received {}'
如果任何路径段都不是字符串,则会引发TypeError。
我想念什么吗?为什么这样:
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// Returns: '/foo/bar/baz/asdf'
忽略'quux'
和'..'
吗?
它们不是零长度吗?
即使在REPL中也玩过(请参见屏幕截图)
答案 0 :(得分:2)
Path.join不会忽略最后两个参数。 Path.join接受您输入的参数,并以字符串格式输出规范化路径。
因此,实际上,这是在构造您的字符串以形成从左到右的路径/foo/bar/baz/asdf/quux/
,最后一个参数(..)指示path.join“返回目录”。因此,您的最终结果将是:/foo/bar/baz/asdf/
答案 1 :(得分:0)
第1部分:当您提供对象而不是字符串时,您期望发生什么?简而言之:这没有意义,因此不起作用。
第2部分:由于..的意思是“上一个目录”,因此清除了路径的最后一部分,因此似乎没有任何作用。实际上,它不会被忽略-只是最后两个参数相互清除。
答案 2 :(得分:-2)
path.join('foo', {}, 'bar');
,{}
代表一个空对象,而不是一个字符串(是否为空)。因此,它是path.join()
的无效参数。关于path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
,..
指向父目录。
通过终端中的实验,您会发现...
/foo/bar/baz/asdf/quux/..
等效于/foo/bar/baz/asdf