Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   JavaScript, ты пьян, иди домой! (https://javascript.ru/forum/misc/81136-javascript-ty-pyan-idi-domojj.html)

jaroslav.tavgen 07.10.2020 11:13

JavaScript, ты пьян, иди домой!
 
Прошу прощения за такой провокационный заголовок, просто именно эта фраза возникла у меня в голове когда я увидел следующее:

<p>privet</p>
<script>
alert([...document.getElementsByTagName("p")].map(e=>e.innerHTML.match(/[^<^>]/g)).join(""))
</script>


Результат - всплывает окно, где написано "p,r,i,v,e,t".
,
Мой вопрос: ОТКУДА ВЗЯЛИСЬ ЗАПЯТЫЕ???

laimas 07.10.2020 11:35

alert([1,2,3])


Пить меньше надо. ;)

jaroslav.tavgen 07.10.2020 11:37

Цитата:

Сообщение от laimas (Сообщение 529557)
alert([1,2,3])

А что это иллюстрирует?
alert(["a","b","c"].join("")) // "abc"

Цитата:

Сообщение от laimas (Сообщение 529557)
Пить меньше надо. ;)

Вот и я JavaScript'у это говорю!

Aetae 07.10.2020 11:38

.match(/[^<^>]/g)

Найти все символы не равные "<", "^" или ">" по одному.

jaroslav.tavgen 07.10.2020 11:39

Цитата:

Сообщение от Aetae (Сообщение 529559)
.match(/[^<^>]/g)

Найти все символы не равные "<", "^" или ">" по одному.

Верно, а запятые откуда (см. код, который я привёл в своём предыдущем сообщении)?

laimas 07.10.2020 11:49

Цитата:

Сообщение от jaroslav.tavgen
Верно, а запятые откуда

От туда, это просто строковое представление массива, в котом каждый его элемент разделен строкой, это тоже самое как и Array.toString(). Почитайте доки.

jaroslav.tavgen 07.10.2020 12:01

Цитата:

Сообщение от laimas (Сообщение 529561)
От туда, это просто строковое представление массива, в котом каждый его элемент разделен строкой, это тоже самое как и Array.toString(). Почитайте доки.

Непохоже.

Смотрите:

["p","r","i","v","e","t"].join("") // "privet"
[...document.getElementsByTagName("p")].map(e=>e.innerHTML.match(/[^<^>]/g)).join("") // "p,r,i,v,e,t".

И там и там строковый массив, а результат разный.

jaroslav.tavgen 07.10.2020 12:11

Всё, сообразил. Я ошибся и join'ом соединял не результаты регулярного выражения, а параграфы.

Правильно должно быть так:

<p>privet</p>
<script>
alert([...document.getElementsByTagName("p")].map(e=>e.innerHTML.match(/[^<^>]/g).join("")))
</script>

laimas 07.10.2020 12:21

Цитата:

Сообщение от jaroslav.tavgen
Я ошибся и join'ом

Я ваш join вообще мимо ушей пропустил )

Nexus 07.10.2020 15:48

Цитата:

Сообщение от jaroslav.tavgen
а запятые откуда

Разберитесь, как работает spread operator.

alert([...'asd']);


Часовой пояс GMT +3, время: 15:49.