2012-10-09 40 views
2

我發現,當我逃脫開始從0到7,並提醒他們的數字,我得到一個奇怪的符號:得到一個奇怪的字符時提醒逃脫號

alert("\0"); // or \1, \2, \3...\7 

Weird character

這是唯一可見當我提醒它時,但document.write和console.log不會顯示它。大於7的轉義數字將顯示正常。我正在使用最新版本的Chrome。爲什麼我會得到這個奇怪的角色?謝謝。

+0

似乎在OS X上的Chrome v22中沒有發生。 –

+0

@FelixKling我實際上使用的是最新版本的Chrome。 –

+0

'\ 0'是C終止字符串的'NUL'字符,我相信它與JS類似。 –

回答

3

section 7.8.4中描述了字符串常量的解析方法。

但是,您看到的行爲在Annex B.1.2中描述。本節介紹舊版ES中的八進制轉義序列,該序列似乎仍受支持。將得到的字符被定義爲如下:

  • OctalEscapeSequence :: OctalDigit [先行∉DecimalDigit]是其代碼單元的值是OctalDigit的MV的字符的CV。
  • OctalEscapeSequence的CV :: ZeroToThree OctalDigit [先行∉DecimalDigit]是其代碼單位值是字符(8倍的ZeroToThree的MV)加上的MV OctalDigit
  • OctalEscapeSequence :: FourToSeven OctalDigit的CV是其代碼單位值是(8倍的FourToSeven的MV)加上的MV OctalDigit的字符。
  • OctalEscapeSequence的CV :: ZeroToThree OctalDigit OctalDigit是其代碼單位值是字符(64(即,82)倍ZeroToThree的MV)加(8倍第一OctalDigit的MV)加上第二個OctalDigit的MV。

\x\xx\xxx)僅解釋爲八進制序列如果x爲八進制數字,即07之間。

所以,所有的字符\0-\7實際上是control characters。較高的值指的是其他字符,例如\101A

我不能告訴你爲什麼alert顯示一個奇怪的字符,控制檯不顯示任何東西......這可能是一個實現細節。


有趣的事實:八進制轉義序列不是在嚴格模式允許的。

有趣的事實#2:\0其實並不是一個八進制轉義序列,並在嚴格模式下仍能正常工作,因爲它有自己的生產規則(見section 7.8.4)。 OTHA,\00是一個八進制序列,將在嚴格模式下引發錯誤。

+0

很酷。我已經知道這個小怪癖一段時間了,但我從來沒有想過要問這件事。現在當我做'\ 1234567「'我得到'S4567'。另外,'「\ 44」==「$」':) –

+0

是的,只有前三位數字被認爲是轉義序列的一部分,而'\ 123'似乎是'S' :) –

+0

另一個問題:爲什麼我只能用'alert'而不是'console.log','.write'或用HTML來看這個字符? –