Я прочитал лексическую грамматику строковых литералов. Я узнал, что и "\9"
, и "\7"
считаются недопустимыми строковыми литералами. Но почему alert("\9")
дать 9
пока alert("\7")
пуст (я ожидал \7
)?Почему « 9» дает «9», а « 7» пуст?
ответ
\7
интерпретируется как восьмеричная строка и дает один символ с ASCII-значением 7. 9 не соответствует восьмеричной базе, поэтому он интерпретируется как обычный символ. Обратная косая черта тихо отбрасывается, так как она не имеет побочных эффектов.
https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Values,_variables,_and_literals#Using_special_characters_in_strings Смотрите также:
\XXX
Персонаж с кодировкой Latin-1, указанный до трех восьмеричных цифрXXX
между0
и377
. Например,\251
является восьмеричной последовательностью для символа авторского права.
alert("\7")
не дает вам пустой строки, это дает вам строку с символом 7. Это происходит потому, что браузер вы проверяете его на расширяющее определение строкового литерала, чтобы для восьмеричного характера экранирует, как описано в Section B.1.2 of the spec.
С 9
не является восьмеричной цифрой, \9
не интерпретируется как восьмеричная escape-последовательность символов, и поэтому обратная косая черта тихо отбрасывается.
Обратите внимание, что в соответствии с реализацией, если вы были в строгом режиме, alert("\7")
тоже не работал, как вы можете видеть здесь с Chrome, Firefox или другим браузером, поддерживающим строгий режим: Live Copy | Source
(function() {
"use strict";
alert("\7"); // fails
})();