// "Глубокое" сравнение объектов
// т.е. сравнение по всем полям и значениям
// включая вложенные
function deepEqual(a, b) {
// Если переданы ссылки на один объект, то они равны
// Или если переданы равные скалярные значения
if (a === b) return true;
// Если хотя бы один пуст или не является объектом
if (a == null || typeof a != "object" ||
b == null || typeof b != "object") return false;
// Получаем все ключи объектов
let keysA = Object.keys(a), keysB = Object.keys(b);
// Если длина разная, значит ключей разное кол-во, объекты не равны
if (keysA.length != keysB.length) return false;
// Проверка каждого ключа.
// Если хотя бы один отсутствует во втором, - не равны
// Плюс запускается рекурсия по вложенным значениям
for (let key of keysA) {
if (!keysB.includes(key) || !deepEqual(a[key], b[key])) return false;
}
// Если все проверки пройдены, значит объекты равны
return true;
}
Почему на скриншоте ниже под синей чертой мы не указываем 'format', а в остальных контейнерах указываем?
А факт наличия двух свойств src вас не смущает? =))
Это обычное дело в css — сначала указывается устаревшее свойство, или свойство для устаревшего браузера, а после него современное. Браузер, если не понимает современное, возьмет предыдущее, а браузер который понимает всё, возьмет последнее объявление.
Просто таким образом отсекается центральный элемент массива при нечетном количестве. Не выполняется бесполезное присваивание типа массив[3] = массив[3]
Если говорить о замене, то наверное можно использовать отдельные библиотеки, если на сайте не нужна большая часть функционала jquery. К примеру нужна выборка по селекторам, анимашки и аякс. Можем для выборок использовать ванильный querySelector, для анимашек — css, а для аякса — fetch или axios.
tendkuh, не-не-не, нужно различать "критику" от ютуберов и прочих "программистов" и критику от авторитетных разработчиков. Второго типа я особо не встречал, а если и есть статьи, то они не в духе «Vue убийца jQuery». У мня ребенок так же забывает старую игрушку при покупке новой.
Изучить Vue/React определенно нужно, но именно как отдельный скилл, а не замену jquery. Сайты бывают разные, не стоит везде совать новомодные штуки, если и проверенные решения отлично справляются.
Поясняю — нет ни одной библиотеки, совместимой с jquery, а значит ни один jquery плагин не заработает (исключение те плагины, что используют только селекторный двиг sizzle, но суть не в этом). И ни в одном другом решении нет такого кол-ва сторонних расширений.
Ниже советуют Vue.
Да, заменить можно. Но это совершенно другая тема. И для других целей.
Более того: Vue и jQuery прекрасно соседствуют на одном сайте.
Так что в первую очередь стоит ответить на вопросы, Владислава Владислав Лысков : А с какой целью ищется замена? чем не устраивает известное решение?
QWERTY01, Вам НЕ нужно отправлять форму, если есть ошибка, и если нет ошибки, ТОЖЕ НЕ нужно оправлять форму стандартным способом, с перезагрузкой страницы. Значить вам нужно предотвратить стандартное поведение сабмита. Значит preventDefault должен вызываться всегда. Безо всяких условий. Теперь ясно?
e.preventDefault();
всегда должен отрабатывать, а не по условию. вам же не нужно отправлять форму стандартным способом в любом случае (ошибка/нет ошибки)
При автоимпорте неймспейсы сортируются по алфавиту.
Для javascript есть отдельная настройка сортировки импортов и членов
Для ручной сортировки строк есть плагин https://yadi.sk/d/QgMmpU3dj9oaZQ