2015-06-22 61 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