JavaScript: ошибки, которые вы чаще всего допускаете в изучении!
ฝัง
- เผยแพร่เมื่อ 5 ก.ย. 2021
- Что на самом деле происходит, когда пользователь вбивает в браузер адрес google.com
habr.com/ru/company/htmlacade...
Сервисы с задачами по JS и программированию
www.hackerrank.com/
www.codewars.com/
codebattle.hexlet.io/
checkio.org/
Оригинал статьи
dou.ua/forums/topic/34516/
#JavaScript #Frontend #Программирование #Обучение #html #css #фронтенд
Товарищи, прошу прощения за не самое лучшее качество видео, звука и подачу информации =)
Это был один из первых роликов, поэтому я еще не понимал как сделать хорошо и с правильной динамикой.
Надеюсь новые видео вам понравятся больше!
HTML это 100% работы =))
видео пушка, как и твой канал в целом, думаю скоро у тебя будут сотни тысяч подписчиков ))
Норм, усложняй а-то пока скучно
th-cam.com/video/nMcnkkwAg1s/w-d-xo.html на 7.45 почему на вопрос не дал правильный ответ?
Объясните пожалуйста. Я понял значение функции [].at(). НО Почему бы просто не сделали так чтобы можно было в индексах использовать отрицательные цифры?
на 6:59 ошибочка, ноль возвращается потому что первое ложное
Дааа, ты абсолютно прав! Благодарность за внимательность)
@@it2138 нужно видео исправить
Злой автор сломал этим мне мозг)
я как олень полез в ide всё это дело проверять, потом ещё раз 5 пересматривал
@@user-pp8lw8cx4w бывает)
Потрясающая подача! Продолжай в том же духе. Я смотрю, канал активно растёт - это радует!
Классное видео, благодаря ему я доработал код.
Из объекта выделял переменные, каждую отдельно, а потом еще и удалял их из объекта через delete. 4 строчки кода сжал до одной:
const { driver, car, ...contract } = currentContract
Спасибо!
Он сложный, потому что народ сразу лезет в reduce вместо того чтобы понять как работает цикл for :)
Если ты про момент на 9:03 то поздравляю, ты прочитал мои мысли, я сразу про reduce подумал , хотя там сложного то ничего и нет, аккумулятор в виде 0, и каждой итерацией считаем сумму корзины и соответственно потом возвращаем аккумулятор, делов то
@@awenn2015ой как замучали эти методы меня. сидел над фильтром, редюсом и мапом. за 2 дня научился их юзать))
Я не умею использовать редюс гы
То что Вы рассказываете, нередко является придуманной аналогией которая не имеет отношению к языку JS. И в этом не было бы ничего плохого, если бы Ваши аналогии работали для всего языка одинаково. А не тут работает а тут все иначе.
00:06:02 *Логическое И или логическое ИЛИ*
Объяснение автора не только не соответствует спецификации, но еще и запутывает человека.
Согласно спецификации конструкция подобной этой:
const resultA = 40 && 2 || 33
будет обрабатываться согласно следующему алгоритму:
весь код будет интерпретирован как assigment expression ( resultA = 40 && 2 || 33 )
то есть некоторое выражение которое нужно вычислить. Что мы пониманием интуитивно.
Далее JS выделит выражение: 40 && ( NextExpression )
И применит к нему следующие шаги:
1. Пусть lval будет результатом вычисления выражения (40)
согласно спецификации 40 - числовой литерал который вернет сам себя. то есть lval === 40
2. Пусть lBool будеь результатом выполнения - ToBolean( lval ) где:
функция ToBolean возвращает либо true либо false в зависимости от того что в нее передали:
2.1 если передали true или false, то вернуть что передали.
2.2 если передали +0, -0, 0, NaN, null, undefined то вернуть false
2.3 все прочее - вернуть true.
То есть ToBolean от числа 40: ToBoolean( 40) => True
3. Если Шаг 2 вернул False то прекратить вычисление и вернуть lval
В противном случае вычислить NextExpression
Та как Шаг 2 вернул True. То JavaScript идет дальше и теперь вычисляет выражение:
2 || ( Next Expression )
Что приведет к выполнению шагов:
Шаг 1 и Шаг 2 идентичен тому что выше.
3. Если шаг 2 вернул true то завершить вычисления и вернуть lval
Так как выражение (2) при его вычисление даст 2, а передача жтого результата в ToBoolean вернет true,
то цепочка вычислений прирывается. А это означает что изначальный идентификатор resultA связывается со значением 2.
Почему это правильно, а то что сказал автор видео - не правильно.
Потому что для случая выражения
const resultB = ( 4 * 2 ) && ( 3* 6)
выражение 3*6 будет вычислено только в том случае, если ToBoolean от (4 * 2) вернет true.
То есть дополнительная нагрузка на интерпретатор будет только тогда когда первая часть выражения вернет то, что позволяет оператору && принят решение о выполнении следующей части.
То есть в случае const resultB = ( 4 * 0 ) && ( 3* 6) JavaScript никогда даже разбирать на части выражение, которое идет за && не начнет.
То есть результат Logical AND Expression в JavaScript правильно описывать так:
( A ) && ( B ) && ( C ) && ( D ) .... && ( n );
преобразовывается в
( A ) && ( все что дальше)
и если результат вычисления от ToBoolean ( A ) === true то продолжить вычислять все что идет правее.
Если false вернуть результат вычисления.
окей, я когда впервые услышал черрипикнуть, то подумал, что чел просто решил звук воробья так назвать
Большое спасибо за материал!!! Очень хорошая подача )
Спасибо. Интересно. С юмором
Посмотрите на все фреймворки и выберите реакт, если не хотите потом искать работу две недели 😂
Видос огонььь!
Классные видео!
Огромное спасибо.
Спанчбоб - мой любимыый мульт)) Лайк!
Завалился на 0 && 2.
Не сразу понял, а потом как понял!
Это равносильно: false и 2
Второе значение не будет проверяться, так как первое вернуло false и проверка останавливается
(как заметили другие в комментариях - в ролике оговорка)
Нельзя сказать, что я не знал, но завалил проверку, так как не сообразил сразу.
После твоего коммента и мне стало всё понятно, 👍
Ееее кремниева долина! Обожааю
Если программист не знал 1 функцию arr.reduce(, это не значит, что его нужно посылать, и то что он не подходит, так можно любого программиста послать, просто потому что он чего то не знает! Как вариант спрашивать его какую то редкую или не очевидную фичу js и посылать якобы по профнепригодности
Кстати, а можете сделать видео по правилу "правильного кода"?
как написать код меньше, быстрее, какой будет работать быстрее
даже if else мгоние пишут абы как... а ведь его можно писать ИНАЧЕ и короче
Топ контент
Да ты крут
Да на 7:00 ошибка в комментарии, "конечно же ноль, возвращается первое истиное", 0 && 2 должно вернуться не первое истиное, а последнее истиное или первое встретевшееся ложное, поскольку 0 логически считается ложное, он и возвращается.
5:32- лайк)
8:40 так то есть люди которые все еще пинут код в es5 синтаксисе.
стандарты это как версии. в целом это имеет значение только когда мы говорим о компиляции JS, например при настройке TS config.
во всех остальных соучае пофиг.
но все равно не стоит забывать о тех, кто использует var в продакшене
let потому и нужен что-бы скрыть её там где это необходимо,а не пихать везде подряд.Например в цикле for лучше всего использовать let
12:01 можно же деструктуризировать в круглых скобках (где ф-я принимает параметр) и сделать еще на одну строчку меньше
Но он станет менее читабельным
9:35 если элементов в массиве будет несколько сотен тысяч, решение через for, как раз таки, будет более приоритетным нежели reduce
в reduce отсутствует проверка на размер массива. с пустым массивом оно крашнет
6:05 я ещё люблю их называть операторами замыкания
7:01 возвращается не первое истинное, а первое ложное, поэтому и вернулся ноль, ноль - это фолси, которое && видит как фолс
Фраза на 4:50, где на фоне такая картинка, звучит очень смешно)
я помню, совсем недавно...
был вопрос на интервью - посчитать корзину и вывести total всех цен...
так вот, я сделал через reduce и был собой доволен, но!!!! мне сказали, что .reduce работает дольше for()... поэтому я плохо знаю оптимизацию js...
ппц...
Дорогой автор, мне интересно Ваше мнение!
Как по мне, reduce сложная функция, но for ещё хуже. В последней, наверное, гораздо меньше выразительности. Если в задачи было условие по поиску самого быстрого решения - значит сказали всё правильно. Если же нет, то замечание выглядит странным.
@@ra-dro нет, посто было посчитать итоговое. Сделал через редюс. Но сразу докалупались, что это долго... И так не пишут, а пишут через фор, т.к быстрее работает. Но не стояла задача сделать максимально быстро, а просто посчитать числа
@@user-qj2yg1rn3j Значит люди сами не знают, чего хотят, лишь бы приколупаться. Превентивная оптимизация в угоду читаемости - двойное зло. (:
из какого фильма взят отрывок в начале
?
9:10
в цикле фор разве еденичку от длинны корзины не надо отнять?)
Не надо.
я выбрал фреймворк Реакт, а потом оказалось, что это библиотека, что мне делать
Да не сложный он!! А запутанный, ввиду того, что эволюционировал!!!
Дорогой автор, позволь вопрос. Ты говоришь, что YDKJS - must read. Но ведь второе издание сейчас имеют лишь 2 тома, а первое (полное) было написано аж в 2014-2015. При этом Справочник по JS от Флэнагана обновился в 2021 году. Я слышал про YDKJS и ранее, но всегда смущало, что местами он мог устареть. Как и Флэнаган (но вот он обновился). Что выбрать читать? Времени мало, зря читать не хочется. А ещё надо тестирование осваивать))
Я всегда делю код на логические блоки с помощью комментов
ЖС - легкий. Вся та мозаика на слайде с набором библиотек - чепуха. Там основы главное понять. Остальное все - либо уже не актуально, типа Доджо, Ембер и Марионетт. Либо учится за неделю на уровне практического применения с дальнейшим погружением в нюансы по мере надобности - типа Свелт, Реакт или Вью.
А бест практис наработается после пары-тройки код ревью, если оно есть на проекте. И то, часто это вкусовщина и дело привычки. Одни пишут так, другие - эдак. Одну и ту же задачу.
Как я напился ВОДОЙ
Ошибка на 6:54: ответ верный, объяснение ошибочно. “&&” возвращает не первое истинное значение, а первое логически ложное, либо если таких не найдено - последнее вычисленное (последнее из цепочки истинных). Даже отбросив контекст - сам по себе ноль назвать истинным в булевом контексте как-то прям совсем дерзко) При всём уважении к автору канала с превосходным материалом - такие штуки перед публикацией стоит проверить, перепроверить, и может быть даже ещё раз перепроверить.
Ну получается что многое нужно учить не для того, что бы использовать, а для того, что бы пройти собеседование 🤦♂️
Я чет тоже немного засомневался. Я конечно в ИТ не работал, не знаю, но на мой взгляд главное уметь делать то, чем ты будешь заниматься на работе. А если ты какие-то мелочи в этом не совсем понимаешь (ну мб для перехода к другим задачам нужны эти мелочи), то тебе сможет подсказать коллега.
С другой стороны надо как-то отсеивать тех, кто не сможет выполнять то, что требуется.
Я могу пример с музыкой привести. Учил самостоятельно и разбирался долго. Учил всё, от самих нот до сведения. Округлим до 10 лет, условно (учиться можно всю жизнь, в принципе). И я могу со всей уверенностью сказать, что минимум половина знаний вообще не используется и вряд ли пригодится. Это мб раньше надо было знать, как работает сайд-чейн компрессия в мелочах, сейчас же есть готовые плагины, которые в пару кликов это делают. Подозреваю, что с программированием примерно то же самое.
как поставить дополнительный лайк?)
3:46 где такую картинку взять по Git
С этого ролика) Ставишь на паузу , скриншотишь, сохраняешь :)
@@user-dy2kg4he2e ахах
Да, Backbon особенно важно знать.
чистый код не во всех случаях гуд
В консоли всегда будет выводиться 10?
да, потому что сетТаймаут ставит вызов в следующую итерацию eventLoop. ДО того как интерпретатор js дойдет до их выполнения он уже прокрутит цикл 10 раз. В переменной i будет 10, которая и выведется 10 раз, взятая из замыкания колбэчной функции. Может непонятно написал, но тогда вам надо гуглить eventLoop js
@@SoreraRU попробуйте выполнить данный код
это не так работает
это пример замыкания, когда интерпретатор запоминает окружение
@@unkind_duck ага ага
@@SoreraRU Тут как раз таки основной вопрос в том, что var глобальна, и по сути, каждый цикл будет перезаписывать её глобально, а не внутри лупа цикла.
Незнаю меня только и єтим он и манит єсли надоест можна лигко свичнуться в чтото другое без смени язика...
вроде ж 0 это false....
хотя вообще прикольно, не знал что эти операторы можно так юзать.
Да, ошибка
В js эти операторы ещё юзают для сокращённой записи, вместо if (true) run() пишут true && run()
@@this_IsUsername очень плохой пример использования оператора
@@faust2134 почему?
Ещё страшнее PHP
Не айтем, а итм)))
Ага, докажи Мурычу, что Var устарел )))
Самый сложный и не понятный язык это js,и не кто его не может объяснить а тем более научить его работе.Я в программирование 3 года но с этим языком полный мусор.
Чистый код не существует
7:00 через секунду выведется все и сразу от нуля до девяти, ибо цикл просто запустит 10 таймаутов по одной секунде, а не будет ждать выполнение каждого из них для запуска следующего.
да, у тебя запустится 10 таймаутов.
но к тому моменту, когда они сработают, и уже равно 10.
в консоли ты получишь десять десяток через секунду после старта программы
Пройдет секунда и сразу выведется 10 раз по 10. Javascript такой javascript)
@@user-dv9fk1hd3s А если использовать let, то сначала пройдёт одна секунда, а только потом выведутся числа от 0 до 9.
@@StepanChuevYT да, я сначала представил в виде let. давно уже не юзал вары
@@augusthughes2871 +
ecmascript стандарт и html5 стандарт, остальное все филькина грамота которая плодит мифы и получаем то что 90% разработчиков js думают что eventloop это часть js)
Дажваскриптизерам совсем заняться нечем? Какое отношение к элегантному или чистому решению может иметь кусок кода оформленный другим синтаксисом или через другой подход, всякие функциональные плюхи декларативного подхода?
Самая главная ошибка,это учить js,серьезно.
Вредный контент для новичков
javascript ебучее говно