2016-02-23 31 views
1

在Javascript中,为什么这个表述不相同'\b,\b'在Javascript中,为什么 b字符在.join()中被删除?

['\b', '\b'].join() 
//=> "," 

根据MDN文档上join

如果元素是未定义或为空,它被转换为空字符串。

那么为什么\b被评估为undefined/null?

['\btest', '\btest2'].join() 
//=> "test,test2" 

一些疯狂的事情:

此外,\b从它前面加上任何字符串,e.g下降。

+1

在你的控制台输入'“\ b”',它会返回一个空字符串 – gurvinder372

+0

@ gurvinder372是的,但是为什么? '\ a'返回'a',这也很奇怪。这个反斜杠字符在做什么? – ccnokes

+1

它是一个特殊的字符。尝试使用双反斜杠b - '\\ b' –

回答

2

那么,为什么是\ B为评估为未定义/空?

作为每spec

在确定序列\ UnicodeEscapeSequence任何出现首先与由UnicodeEscapeSequence表示的码点 置换,然后的 整个IdentifierName码点被转换通过UTF16Encoding (10.1.1)每个代码点对代码单元进行编码。

又读this part了解哪些是转义字符,哪些不是

CharacterEscapeSequence ::

SingleEscapeCharacter NonEscapeCharacter

SingleEscapeCharacter ::

的“”

一个\ bfnrtv

NonEscapeCharacter

:: SourceCharacter但EscapeCharacter的不是一个或LineTerminator

EscapeCharacter ::

SingleEscapeCharacter

DecimalDigit徐

HexEscapeSequence ::

X HexDigit HexDigit UnicodeEscapeSequence ::ü Hex4Digits∪{} HexDigits

这就是为什么\b是同时\a仍然是 “一个” 特殊字符将被删除。

+0

@ccnokes,检查这个答案**为什么**发生这种情况。 – gurvinder372

+0

你引用了规范的错误部分。 'b'不是“UnicodeEscapeSequence”,它是一个以'u'开头的十六进制数字。您正在寻找名为“SingleEscapeCharacter”的制作。 –

+0

@torazaburo更新了答案,包括什么是转义字符,什么不是。 – gurvinder372

1

\是一个转义字符,当后面跟着一个非特殊字符时,它不会成为一个字面\。相反,你必须加倍它\\

试试这个

['\\btest', '\\btest2'].join(); 
//=> "\btest,\btest2" 
+0

不错。这个答案解释了为什么:http://stackoverflow.com/questions/10041998/get-backslashes-inside-a-string-javascript – ccnokes

1

\b是一个特殊字符,这意味着退格。

这就是它被转换为'空'字符串的原因。

Reference:

相关问题