2015-06-22 64 views
1

這個問題不是很重要,但是,我發現當反斜槓記錄到控制檯時,值不會按預期輸出。Node.js關心反斜槓

請在終端中嘗試以下兩個示例來確認結果;我已經嘗試過版本0.10和0.12,並試圖用'UTF'替代UTF十六進制代碼和字符代碼等。行爲是一樣的。

例子一使用String.replace()。我發現這種意外的行爲最初使用正則表達式,類似於.replace(/([*\-\[\] etc...])/g, '\\$&'),但是,下面的代碼簡化了這種情況。其中

var bcks = '\\', str = 'Hello*'; 
console.log('Backslash', bcks, '\nString', str); 
str.replace('*', bcks); 

的輸出是下面的:

Backslash \ 
String Hello* 
'Hello\\' 

實施例2而在對象中的一個值使用反斜槓。在使用.replace(etc ...)時也發現了這種情況,但在將其減少到以下之後,意外行爲仍然很明顯。

var tmp = {key: 'Hello\\'}; console.log(tmp); console.log(tmp.key); 

其輸出如下:

{ key: 'Hello\\' } 
Hello\ 

這可能是stdout僅僅是這種行爲的原因,但如果不是這樣,那麼我擔心的是,這個問題是不是僅限於日誌記錄。

有人可以解釋這種行爲嗎?


編輯:在兩個示例中,在任何時候一個應該安慰串或對象,輸出雙反斜槓。

+1

在這兩種情況下,當我運行代碼時,我會得到您所說的輸出。 – Quentin

+0

那麼它輸出什麼呢? – Bergi

+0

預期的行爲是每次都看到一個反斜槓。我會編輯我的帖子,使其更清楚一點。 –

回答

0

這僅限於使用節點的REPL。它似乎做了一些奇怪的逃避事情......有時。

如果您只是鍵入bcks,它將返回可複製值'\\'。但是,如果您console.log()它,它會記錄其實際值:\

我認爲這可能與JSON.stringify()類似。

+0

你是正確的,在某些情況下返回'\\'會解析爲雙精度而不是單個反斜槓。 –

+0

如果您嘗試''Test *'。替換('*',函數(char){return'\\'+ char});'在您的控制檯中,雙反斜槓行爲也存在。 –

+0

再次因爲它是串化它。 – Scimonster