Вложенная цитата
Вложенная цитата — это цитата , инкапсулированная внутри другой цитаты, образующая иерархию многоуровневую . Сосредотачиваясь на определенной цитате, необходимо интерпретировать ее в пределах ее объема. Вложенные цитаты могут использоваться в литературе (как во вложенном повествовании), речи и информатике (как в «мета»-операторах, которые ссылаются на другие высказывания как на строки ). Вложенные котировки могут сбивать с толку, пока их тщательно не оценят и пока каждый уровень котировок не будет рассмотрен в перспективе.
В литературе
[ редактировать ]В языках, которые допускают вложенные кавычки и используют пунктуацию кавычек для обозначения прямой речи, иерархические подуровни кавычек обычно акцентируются путем чередования первичных и вторичных кавычек. Всесторонний анализ основных систем кавычек, используемых в основных системах письма, см. в разделе «Кавычки» .
В программировании на JavaScript
[ редактировать ]Вложенные кавычки часто становятся проблемой при использовании ключевого слова eval . [1] Функция eval — это функция, которая преобразует и интерпретирует строку как реальный код JavaScript и запускает этот код. Если эта строка указана как литерал , то код должен быть написан как сама кавычка (и соответствующим образом экранироваться ).
Например:
eval("var a=3; alert();");
Этот код объявляет переменную a , которой присваивается значение 3 , и пользователю открывается пустое окно предупреждения.
Вложенные строки (уровень 2)
[ редактировать ]Предположим, нам нужно было сделать кавычку внутри интерпретируемого кода, заключенного в кавычки. В JavaScript вы можете иметь только один подуровень неэкранированной кавычки, который должен быть альтернативой кавычке верхнего уровня. Если символ котировки 2-го уровня совпадает с символом первого уровня, эти кавычки необходимо экранировать. [2] Например:
alert("I don't need to escape here"); alert('Nor is it "required" here'); alert('But now I do or it won\'t work');
Вложенные строки (уровень 3 и выше)
[ редактировать ]Кроме того, (в отличие от примера из литературы) вложенная кавычка третьего уровня должна быть экранирована, чтобы не конфликтовать с разделителями кавычек первого или второго уровня. Это верно независимо от инкапсуляции чередующихся символов. Каждый уровень после третьего должен быть рекурсивно экранирован для всех уровней кавычек, в которых он содержится. Сюда входит сам escape-символ, обратная косая черта («\»), которая экранируется сама по себе («\\»).
Для каждого подуровня, на котором содержится обратная косая черта, она должна быть экранирована для уровня выше него, а затем все обратные косые черты, используемые для экранирования этой обратной косой черты, а также исходная обратная косая черта, должны быть экранированы, и так далее и тому подобное для каждого уровня. то, что вознесено. Это сделано для того, чтобы избежать двусмысленности и путаницы при побеге.
Вот несколько примеров, демонстрирующих некоторые из вышеперечисленных принципов:
document.write("<html><head></head><body><p>Hello, this is the body of the document.");
document.writeln("</p>");
document.write("<p>A newline in HTML code
acts simply as whitespace, whereas a <br> starts a new line.");
document.write("</p></body></html>\n");
eval('eval(\"eval(\\\"alert(\\\\\\\"Now I\\\\\\\\\\\\\\\'m confused!\\\\\\\")\\\")\")');
Обратите внимание, что количество обратных косых черт увеличивается от 0 до 1, от 3 до 7 и до 15, что указывает на . Правило для последовательно вложенных символов, означающее, что длина escape-последовательностей растет экспоненциально с глубиной кавычек.