我發現,當我逃脫開始從0到7,並提醒他們的數字,我得到一個奇怪的符號:得到一個奇怪的字符時提醒逃脫號
alert("\0"); // or \1, \2, \3...\7
這是唯一可見當我提醒它時,但document.write和console.log不會顯示它。大於7的轉義數字將顯示正常。我正在使用最新版本的Chrome。爲什麼我會得到這個奇怪的角色?謝謝。
我發現,當我逃脫開始從0到7,並提醒他們的數字,我得到一個奇怪的符號:得到一個奇怪的字符時提醒逃脫號
alert("\0"); // or \1, \2, \3...\7
這是唯一可見當我提醒它時,但document.write和console.log不會顯示它。大於7的轉義數字將顯示正常。我正在使用最新版本的Chrome。爲什麼我會得到這個奇怪的角色?謝謝。
在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
爲八進制數字,即0
和7
之間。
所以,所有的字符\0
-\7
實際上是control characters。較高的值指的是其他字符,例如\101
是A
。
我不能告訴你爲什麼alert
顯示一個奇怪的字符,控制檯不顯示任何東西......這可能是一個實現細節。
有趣的事實:八進制轉義序列不是在嚴格模式允許的。
有趣的事實#2:\0
其實並不是一個八進制轉義序列,並在嚴格模式下仍能正常工作,因爲它有自己的生產規則(見section 7.8.4)。 OTHA,\00
是一個八進制序列,將在嚴格模式下引發錯誤。
很酷。我已經知道這個小怪癖一段時間了,但我從來沒有想過要問這件事。現在當我做'\ 1234567「'我得到'S4567'。另外,'「\ 44」==「$」':) –
是的,只有前三位數字被認爲是轉義序列的一部分,而'\ 123'似乎是'S' :) –
另一個問題:爲什麼我只能用'alert'而不是'console.log','.write'或用HTML來看這個字符? –
似乎在OS X上的Chrome v22中沒有發生。 –
@FelixKling我實際上使用的是最新版本的Chrome。 –
'\ 0'是C終止字符串的'NUL'字符,我相信它與JS類似。 –