Node.js path.join()忽略参数

时间:2019-03-13 23:07:21

标签: node.js

根据文档:

  

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中也玩过(请参见屏幕截图)

enter image description here

3 个答案:

答案 0 :(得分:2)

Path.join不会忽略最后两个参数。 Path.join接受您输入的参数,并以字符串格式输出规范化路径。

因此,实际上,这是在构造您的字符串以形成从左到右的路径/foo/bar/baz/asdf/quux/,最后一个参数(..)指示path.join“返回目录”。因此,您的最终结果将是:/foo/bar/baz/asdf/

答案 1 :(得分:0)

第1部分:当您提供对象而不是字符串时,您期望发生什么?简而言之:这没有意义,因此不起作用。

第2部分:由于..的意思是“上一个目录”,因此清除了路径的最后一部分,因此似乎没有任何作用。实际上,它不会被忽略-只是最后两个参数相互清除。

答案 2 :(得分:-2)

  1. 对于path.join('foo', {}, 'bar');{}代表一个空对象,而不是一个字符串(是否为空)。因此,它是path.join()的无效参数。
  2. 关于path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');..指向父目录。 通过终端中的实验,您会发现...

    /foo/bar/baz/asdf/quux/..等效于/foo/bar/baz/asdf