2013-03-14 6 views
4

Я прочитал лексическую грамматику строковых литералов. Я узнал, что и "\9", и "\7" считаются недопустимыми строковыми литералами. Но почему alert("\9") дать 9 пока alert("\7") пуст (я ожидал \7)?Почему « 9» дает «9», а « 7» пуст?

ответ

3

\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 является восьмеричной последовательностью для символа авторского права.

4

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 
})();