join() и replace(/,/g,) в javascript останавливаются при достижении символа ‹ в массиве символов - почему?

Я использую функцию javascript join() для преобразования массива символов в строку, одновременно удаляя разделители запятых между символами.

В большинстве случаев это работает именно так, как ожидалось, но я только что обнаружил, что это не работает, если в массиве есть символ меньше (‹).

Например:

var chararray = ["A", "B", "C", "D", "E"];
var string = chararray.join("");

console.log(string);

выводит строку ABCDE

но в этом примере это НЕ работает, как ожидалось

var chararray = ["A", "B", "C", "<", "E"];
var string = chararray.join("");

console.log(string);

создает строку ABC (она останавливается, когда достигает символа ‹)

Если я использую join() - оставляя разделители запятыми - это работает

var chararray = ["A", "B", "C", "<", "E"];
var string = chararray.join();

console.log(string);

производит строку A,B,C,‹,E

но если я затем попытаюсь удалить запятые, используя string.replace(/./g,), я снова получу тот же результат - ABC

var chararray = ["A", "B", "C", "<", "E"];
var string = chararray.join();
var outputstring = string.replace(/,/g, "");

console.log(outputstring);

Создает строку ABC — снова останавливаясь на символе ‹.

Насколько я знаю, ‹ не является специальным символом в javascript (если только он не используется в математическом уравнении/сравнительном уравнении) - так почему он это делает? Он не делает этого с любыми другими символами, включая ›, = и т. д.


person Nonlinear    schedule 27.08.2020    source источник
comment
Где вы видите этот вывод?   -  person VLAZ    schedule 27.08.2020
comment
Он работает, как и ожидалось, и A, B, C, ‹, E - это выход.   -  person Harmandeep Singh Kalsi    schedule 27.08.2020
comment
Я предполагаю, что вы видите вывод, используя Document.write() или что-то подобное, верно?   -  person Pedro Lima    schedule 27.08.2020
comment
БИНГО! Да. Почему работает ЗДЕСЬ, а не в моем внешнем скрипте? document.getElementById().innerHTML делает то же самое - почему? Есть ли лучшая функция для вывода строки или способ решения проблемы с символом ‹ в Document.write()? И почему это проблема только с символом ‹?   -  person Nonlinear    schedule 27.08.2020
comment
Потому что вы пишете в DOM веб-страницы, и браузер интерпретирует ‹ как начало тега HTML.   -  person Will    schedule 27.08.2020
comment
Интересно - так почему же он правильно отображается на ЭТОЙ веб-странице? Что делается по-другому? Кстати, я обнаружил, что window.alert(mystring) выводит на экран полную строку. Почему ЭТА функция правильно отображает строку?   -  person Nonlinear    schedule 28.08.2020


Ответы (1)


Как element.innerHTML, так и Document.write() (извините, я ранее ссылался на португальскую страницу) ожидает получить строку HTML, потому что они предназначены для изменения документа страницы. Из-за этого они всегда будут интерпретировать контент как HTML. Например:

document.write(`They can make text transformations like <b>bold</b> and
<i>italic</i>, or even more complex HTML elements like
<input placeholder="input" />. <div id="text"></div>`);

document.getElementById('text').innerHTML = `<li><small>The</small>
<span style="color: red">same</span> <big>goes</big> <s>to</s>
<a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML">innerHTML</a>`

Они будут интерпретировать любой введенный вами HTML.

Другие методы и свойства, такие как HTMLElement.innerText, < href="https://developer.mozilla.org/en-US/docs/Web/API/Console/log" rel="nofollow noreferrer">Console.log и даже Window.alert(), о котором вы упомянули, не делайте этого. Они берут и отображают текст как есть, игнорируя любой HTML.

document.getElementById('text').innerText = `In fact, giving
<b>HTML</b> to these methods will just display the <b>HTML</b> code,
so <big>be aware of that</big>.`;
<div id="text"></div>

person Pedro Lima    schedule 28.08.2020
comment
Хорошо, отличная информация. Благодарю вас! - person Nonlinear; 29.08.2020