Javascript: ...null!

Metal Messiah
На сайте с 01.08.2010
Offline
160
391

Доброго времени суток!

В последнее время стали появляться фронтенды, которые сыпятся на смартфонах и не работают в старых браузерах на ПК. Такое впечатление, что кто-то специально распространяет "вредоносный" код, а вебмастера по незнанию его хватают и ставят себе.

Поскольку моих знаний Javascipt не хватает (я его учил в прошлом десятилетии, jQuery и Ajax понимаю но тяжелые фронтенды, которые грузят хотя бы одно ядро хотя бы на 70% на нюх не переношу) прошу объяснить как называется и что делает вот это троеточие

n.forEach?(wpcf7={init:g,submit:v,reset:w,...null!==(t=wpcf7)&&void 0!==t?t:{}},
n.forEach(e=>wpcf7.init(e))):console.error("Your browser doesn't support NodeList.forEach().")})}]);

и как от него избавиться в коде чтобы не возникало Unexpected token ... и подобная лажа.

Вопрос важный потому что это ошибка парсинга, а не ошибка времени выполнения, потому из-за такого дерьма в коде не происходит корректный рендеринг страницы (в лучшем случае - все отображается но ничего не работает, в худшем - белый экран).

anonymous, думай что говоришь и не забывай подписать отзыв :)
T7
На сайте с 19.09.2018
Offline
63
#1
Metal Messiah :
и что делает вот это троеточие
console.log(...null!==1&&[2,3])
//2 3
console.log(...[1, 2, 3])
//1 2 3
Можно в функцию в качестве параметров отдать (...х), где х итерабле
Metal Messiah
На сайте с 01.08.2010
Offline
160
#2

Так, допустим. Ваш код мне полностью понятен.

...null!==(t=wpcf7)&&void 0!==t?t:{}

А тут что происходит? Во второй части проверяется определена ли t или нет, и если определена - то все элементы t добавляются параметрами в wpcf7?

Ошибка Unexpected token ...  Chrome либо invalid property id в Firefox лечится заменой

n.forEach?(wpcf7={init:g,submit:v,reset:w,...null!==(t=wpcf7)&&void 0!==t?t:{}},
на
n.forEach?(wpcf7={init:g,submit:v,reset:w,t:{}},

(понятно что костыль и работать оно может не нормально, придется еще думать над этим)

А это что? Разве не рекурсия?

e={largeToSmall:!1,withDesktop:!1,...e};
T7
На сайте с 19.09.2018
Offline
63
#3
Metal Messiah #:
добавляются параметрами в wpcf7?

Кроме того, что можно посмотреть чего там в n () заменив

n.forEach(e=>wpcf7.init(e))
на
n.forEach(e=>{
        console.log(e, wpcf7.init);
        try {
          wpcf7.init(e);
        } catch(err) {
          console.log(err);
        }
})
Ничего в голову не приходит. Может где и в синтаксисе ошибся, но идея понятна


Metal Messiah #:
А это что? Разве не рекурсия?

Нет

let x = {'1':2,t:'5'};
x={largeToSmall:!1,withDesktop:!1,...x};

console.log(x)
/*
{
  "1": 2,
  "largeToSmall": false,
  "withDesktop": false,
  "t": "5"
}
*/

Metal Messiah
На сайте с 01.08.2010
Offline
160
#4
То есть вместо добавления в существующий массив с элементами 1, t еще двух элементов largeToSmall и withDesktop, придумали такую хитрожопую конструкцию, которая валит половину браузеров на этапе парсинга javascript кода. Ладно, понял, теперь осталось понять как с этим бороться глобально.
W1
На сайте с 22.01.2021
Offline
305
#5
Metal Messiah #:
То есть вместо добавления в существующий массив с элементами 1, t еще двух элементов

Ну там как бы неизвестно заранее, сколько и каких элементов.

Metal Messiah #:
осталось понять как с этим бороться глобально.

Наверное, дербанить по факту объект t и добавлять элементы в объект wpcf7.

Мой форум - https://webinfo.guru –Там я всегда на связи

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий