2016-07-13 36 views
1

代碼:path.join爲TMPDIR返回兩個額外的標記(空字符串)

var tmp = path.join(os.tmpDir(), dir); 
var segments = tmp.split(path.sep); // create directories/subdirectories 
console.log(tmp); 
for(var i=0; i<segments.length; i++) { 
    var segment = segments.slice(0, i).join(path.sep); 
    console.log(i, segment.length, segment, fs.existsSync(segment)); 
} 

輸出:

/var/folders/ch/pc8wsx1x1_v10hdl7zxnvjqr0000gn/T/somedir 
0 0 '' false 
1 0 '' false 
2 4 '/var' true 
3 12 '/var/folders' true 

問:

爲什麼指數在0和1是空字符串?

回答

0

由於segments.slice(0, i)

第一次迭代,它排除所述第一元件:

「切片提取直到但不包括端」

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice

第二次迭代,它包括第一個元素,由於路徑被拆分而爲空:tmp.split(path.sep),並且由於路徑以前導斜槓開始。

如果你知道它始終是絕對路徑,那麼在i = 2處開始循環。如果可能輸入了相對路徑,則只需從i = 1開始,在處理絕對路徑時處理索引0處的空白元素。

+0

好的,這本應該寫成什麼樣的正確方法? – user2727195