2016-02-23 58 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:

相關問題