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
Интересно - тогава защо се показва правилно на ТАЗИ уеб страница? Какво се прави по различен начин? BTW - открих, че 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, 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