根據ECMA-262規範(第6版)以嚴格模式在'\'之後的單引號或雙引號字符串中可能有EscapeSequence或LineTerminatorSequence,並且EscapeSequence必須是以下之一:CharacterEscapeSequence,0 [lookahead∉ DecimalDigit],HexEscapeSequence,UnicodeEscapeSequence(見11.8.4)。在ECMA-262嚴格模式下允許的字符串中是否有' 0'後面跟着一個十進制數字?
這是否意味着在'\ 0'之後有任何DecimalDigit是完全不正確的?我知道這樣做是爲了避免與LegacyOctalEscapeSequence(來自B.1.2)混淆,但它只需要在第一個'\ 0'之後放置八進制數字,並且V8引擎似乎以這種方式支持這一點(見下文)。
經過檢查與實施後,事實證明,V8引擎允許「\ 0」只有十進制數字不是一個八進制數字。在這種情況下,它會將它解析爲字符串值爲0的字符串,然後將下一個數字的代碼點值作爲SourceCharacter。當它在'\ 0'後面被賦予一個OctalDigit時,它會拋出一個帶有消息「嚴格模式下不允許使用八進制轉義序列」的SyntaxError,這有點令人誤解。 Chakra和SpiderMonkey似乎在'\ 0'之後的任何DecimalDigit上拋出SyntaxError,但是使用類似的八進制轉義序列的消息,這在某些情況下看起來特別奇怪(在'\ 0'之後'8'或'9' ,它不能是嚴格模式之外的八進制轉義序列)。
所以,我的問題是什麼是規範的正確解釋?
這與特定的JavaScript引擎有什麼關係?刪除標籤。 – xaxxon