Существует причина, по которой это:
decodeURI(decodeURI("\\n"));
Не дает новую строку, но это делает:
JSON.parse('"\\n"');
Это потому, что \n
на самом деле не является компонентом URI(если бы символ новой строки был закодирован URI, он выглядел бы как %0A
, а не \n
), а также потому, что он на самом деле экранирован.
Вот некоторые демонстрации:
Демонстрация 1: decodeURI("\n")
:
var newline = decodeURI("\n");
console.log("Line One" + newline + "Line Two");
Как видно из вышеприведенного, в консоли есть новая строка между Line One
и Line Two
.
Демонстрация 2: decodeURI(decodeURI("\\n"))
:
var newline = decodeURI(decodeURI("\\n"));
console.log("Line One" + newline + "Line Two");
Здесь мы видим, что экранированный символ новой строки (\\n
) при декодировании представляет собой просто строку новой строки - newline
буквально - строка"\n"
, не перевод строки.Мы можем убедиться в этом в следующей демонстрации:
Демонстрация 3: typeof decodeURI("\\n")
:
var newline = decodeURI("\\n");
console.log("Line One" + newline + "Line Two");
console.log(typeof newline);
И здесь мы видим, что decodeURI("\\n")
возвращает просто строку \n
, которая по неизвестным причинам не может быть декодирована с помощью decodeURI
дважды, как вы увидитездесь:
Демонстрация 4: decodeURI(decodeURI("\\n"))
:
var newline = decodeURI("\\n");
var temp = decodeURI(newline);
console.log("Line One" + newline + "Line Two");
newline = temp;
console.log("Line One" + newline + "Line Two");
И здесь мы видим, что newline
и temp
- это почти одно и то же - строка "\n"
.
Существует причина, по которой этот код:
decodeURI("\n");
Фактически возвращает также символ новой строки - это потому, что перед использованием decodeURI
, "\n"
уже является символом новой строки, поэтому decodeURI
является избыточным,Смотрите это:
var newlineString = "\n";
var newline = decodeURI(newlineString);
console.log("Line One" + newlineString + "Line Two");
console.log("Line One" + newline + "Line Two");
Здесь обе строки разделены переносами строк, что означает, что "\n"
на самом деле вообще не декодируется - вам не нужно decodeURI
для этоговообще.
Надеюсь, это поможет вам!
Дополнительная информация: