10 ошибок, которые часто допускают новички Javascript


Оглавление (нажмите, чтобы открыть):

10 ошибок, которые часто допускают новички Javascript

В этой рубрике Вы найдете уроки, которые относятся к теме создания сайта, но не попали ни в один раздел.

Как разместить свой сайт на хостинге? Правильно выбранный хороший хостинг — это будущее Ваших сайтов

Проект готов, Все проверено на локальном сервере OpenServer и можно переносить сайт на хостинг. Вот только какую компанию выбрать? Предлагаю рассмотреть хостинг fornex.com. Отличное место для твоего проекта с перспективами бурного роста.

Разработка веб-сайтов с помощью онлайн платформы Wrike

Создание вебсайта — процесс трудоёмкий, требующий слаженного взаимодействия между заказчиком и исполнителем, а также между всеми членами коллектива, вовлечёнными в проект. И в этом очень хорошее подспорье окажет онлайн платформа Wrike.

20 ресурсов для прототипирования

Подборка из нескольких десятков ресурсов для создания мокапов и прототипов.

Топ 10 бесплатных хостингов

Небольшая подборка провайдеров бесплатного хостинга с подробным описанием.

Быстрая заметка: массовый UPDATE в MySQL

Ни для кого не секрет как в MySQL реализовать массовый INSERT, а вот с UPDATE-ом могут возникнуть сложности. Чтобы не прибегать к манипуляциям события ON_DUPLICATE можно воспользоваться специальной конструкцией CASE … WHEN … THEN.

Распознавание текста из изображений через командную строку

Для человека не составляет особого труда посмотреть на изображение и прочитать представленный текст. Для машины данный процесс не так прост. Однако с помощью imgclip вы сможете быстро выполнить данную операцию.

HTTPie — удобный инструмент похожий на cURL

cURL — это самый известный инструмент для отправки HTTP запросов из командной строки. В этом уроке мы познакомим вас с более удобным аналогом, который называется HTTPie.

12 хитростей JavaScript, которых вы не найдете в большинстве уроков

Когда я начал изучать JavaScript, я составлял список хитростей, которые находил в чужом коде, на веб-сайтах, посвященных проверке кода, и в любых других местах, кроме учебных пособий, которые я использовал.

С тех пор я пополняю этот список, и в этой статье я поделюсь 12 советами, которые кажутся мне особенно умными или полезными.

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

Итак, вот 12 изящных способов написания более лаконичного и производительного кода.

1. Фильтр уникальных значений

Тип Set был введен в ES6, и наряду с оператором «spread» . мы можем использовать его для создания нового массива с уникальными значениями.

До ES6 фильтрация уникальных значений потребовала бы гораздо больше кода, чем сейчас!

Этот трюк работает для массивов, содержащих примитивные типы: undefined, null, boolean, string и number. (Если бы у вас был массив, содержащий объекты, функции или дополнительные массивы, вам понадобился бы другой подход!)

2. Кешируем длину массива в циклах

Когда нас учат циклам for, нам рекомендуется следовать этой стандартной структуре:

Однако, используя этот синтаксис, цикл for пересматривает длину массива при каждой итерации.

Иногда это может быть полезно, но в большинстве случаев лучше и эффективнее кэшировать длину массива, так что к ней нужно обратиться только 1 раз. Мы можем сделать это, определив переменную length

Этот код почти такой же лаконичный, как и приведенный выше, но он работает таким образом, что при увеличении размера массива мы не теряем время на перепроверку array.length .

3. Вычисление короткого замыкания

Тернарный оператор — это быстрый способ написать простые (а иногда и не очень простые) условные конструкции, например:

Но иногда даже тернарный оператор получается сложнее, чем нужно. Вместо него мы можем использовать логические операторы «и» && и «или» || для более точной оценки определенных выражений. Его часто называют «коротким замыканием».

Как это работает

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

Использование && вернет первое false или ‘ложноe’ значение. Если каждый операнд оценивается как true, будет возвращено последнее вычисленное выражение.

Использование || вернет первое true или ‘правдивоe’ значение. Если каждый операнд оценивается как false , будет возвращено последнее вычисленное выражение.

Пример 1

Допустим, мы хотим вернуть свойство length переменной, но мы не знаем её тип.

Мы можем использовать оператор if/else оператор для проверки, что foo это приемлемый тип, однако это может быть довольно долго. Короткое замыкание позволяет сделать это таким образом:

Если переменная foo имеет свойство length, оно будет возвращено. В противном случае вернется length пустого массива: 0.

Пример 2

Были ли у вас проблемы с доступом к вложенному объекту? Вы можете не знать, существует ли у объекта свойство или одно из под-свойств, и это может вызвать неприятные ошибки.

Допустим, мы хотели получить доступ к свойству data , которое находится внутри this.state , но data — undefined до тех пор, пока программа не вернет респонз.

В зависимости от того, где мы используем этот код, вызов this.state.data может помешать запуску нашего приложения. Чтобы обойти это, мы могли бы обернуть все в условное выражение:

Это кажется довольно скучным. Оператор «или» предоставляет более краткое решение:

Мы не можем изменить код выше, чтобы использовать && . Утверждение ‘Fetching Data’ && this.state.data вернется this.state.data независимо от того, равно оно undefined или нет. Это потому, что ‘Fetching Data’ «правдиво», и поэтому && всегда будет пропускать его, когда он указан первым.

Новая предлагаемая фича: опциональная последовательность

В настоящее время существует предложение разрешить «опциональную последовательность» при попытке вернуть свойство, находящееся глубоко в древовидной структуре. Согласно предложению, символ вопросительного знака ? может использоваться для извлечения свойства, только если оно не null

Например, мы могли бы привести свой пример выше к this.state.data?.() — вернет data, только если оно не null .

Или, если мы сомневаемся в переменной state , мы могли бы вернуть this.state?.data .

Предложение в настоящее время находится на Stage 1 в качестве экспериментальной функции. Вы можете прочитать об этом тут, и можете использовать его в своем JavaScript через Babel, добавив @babel/plugin-proposal-optional-chaining в ваш .babelrc файл.

4. Преобразование в Boolean

Помимо обычных логических значений true и false, JavaScript также обрабатывает все другие значения как «правдивые» или «ложные».

Если не указано иное, все значения в JavaScript являются «правдивыми» за исключением 0, «», null, undefined, NaN и, конечно false — которые являются «falsy».

Мы можем легко переключаться между true и false, используя отрицательный оператор !, который также преобразует тип в «boolean» .

Этот тип преобразования типов может быть полезен в условных выражениях, хотя единственная причина, по которой вы бы решили определить false как !1, это если бы вы играли в code golf!

5. Преобразование в String

Чтобы быстро преобразовать число в строку, мы можем использовать оператор конкатенации + , за которым следует пустой набор кавычек «» .

6. Преобразование в Number

Обратное можно быстро сделать с помощью оператора сложения + .

Это также может быть использовано для преобразования boolean в числа, как показано ниже:

Могут быть контексты, в которых оператор + будет интерпретироваться как оператор конкатенации, а не как оператор сложения. В таком кейсе (вы хотите вернуть целое число, а не с плавающей точкой), вы можете использовать тильды:

Тильда, известная как «побитовый оператор НЕ», является оператором, эквивалентным -n — 1 . Так, например,

Использование двух тильд подряд отрицает операцию, потому что — ( — n — 1) — 1 = n + 1 — 1 = n . Другими словами,

Хотя я не могу придумать много вариантов использования, но побитовый оператор NOT также можно использовать в логических значениях:


7. Быстрое возведение в степень

Начиная с ES7 стало возможным использовать оператор возведения в степень ** как сокращение для степеней, что быстрее, чем запись Math.pow(2, 3). Это простой материал, но он попал в список, потому что не так много учебных содержит этот оператор!

Не следует его путать с ^ символом, обычно используемым для записи показателей степени, т.к в JavaScript он является побитовым оператором XOR.

До ES7 сокращение существовало только для степеней с основанием 2 с использованием оператора побитового сдвига влево FrontEndDev и Web Stack в Telegram, чтобы не пропустить самое интересное из мира Web!

10 возможностей улучшить свой стиль в Javascript

Javascript активно набирающий язык программирования. Изначально созданный, чтобы добавить функциональность веб-страниц на стороне браузера, сейчас Javascript уже используется и на сервере для создания backend и работы с базой данных.

Часто недопонимание заложенных в JavaScript парадигм становится причиной большого количества багов.

В статье перечислены как 10 ошибок, которые часто допускают при работе с Javascript, так и правильные примеры Javascript кода.
Воспользуйтесь приведенными примерами, чтобы улучшить свой стиль!

1. Правильно используем this при работе с замыканиями

В последнее время требования к программами на JavaScript сильно выросли. Намного больше используют функции обратного вызова и замыкания, которые часто являются причиной путаницы с ключевым словом this.

Например, выполнение этого Javascript кода:

Приводит к ошибке:

Почему это происходит? Всё дело в контексте. Когда вы вызываете setTimeout(), то на самом деле вызываете window.setTimeout(). В результате, анонимная функция, передаваемая в setTimeout(), определяется в контексте объекта window, который не имеет метода clearBoard().

Традиционное решение, совместимое со старыми браузерами, предполагает простое сохранение ссылки на this в переменной, которая может быть сохранена в замыкании:

Для новых браузеров можно использовать метод bind(), позволяющий связать функцию с контекстом исполнения:

2. Javascript не ограничевает область видимости на уровне блоков

Переходя с других языков разработчики часто считают, что JavaScript создаёт новую область видимости для каждого блока кода. Хоть это и справедливо для многих других языков, но здесь это не так. Посмотрим на этот код:

Если вы думаете, что вызов console.log() повлечёт за собой вывод undefined или ошибку, то вы ошибаетесь: будет выведено «10». Почему? В большинстве других языков этот код привёл бы к появлению ошибки, потому что область видимости переменной i была бы ограничена блоком for. Однако в JavaScript эта переменная остаётся в области видимости даже после завершения цикла for, сохраняя своё последнее значение (такое поведение известно как «var hoisting»). Надо заметить, что поддержка области видимости на уровне блоков введена в JavaScript начиная с версии 1.7 с помощью дескриптора let.

3. Утечки памяти

Утечки памяти практически неизбежны, если во время работы вы не будете их сознательно избегать. Существует немало причин для появления утечек, но мы остановимся лишь на самых частых.

Ссылки на несуществующие объекты

Проанализируем этот код:

Если запустить код на выполнение, то можно обнаружить массивную утечку памяти со скоростью около мегабайта в секунду. Создается впечатление, что мы теряем память выделенную под longStr при каждом вызове replaceThing. В чём причина?

Каждый объект theThing содержит свой собственный объект longStr размером 1Мб. Каждую секунду при вызове replaceThing, функция сохраняет ссылку на предыдущий объект theThing в переменной priorThing. Это не проблема, ведь каждый раз предыдущая ссылка priorThing будет перетерта (priorThing = theThing;). Так в чём же причина утечки?

Типичный способ реализации замыкания — это создание связи между каждым объектом-функцией и объектом-словарем, представляющим собой лексическую область видимости для этой функции. Если обе функции (unused и someMethod), определенные внутриreplaceThing, реально используют priorThing, то важно понимать, что они получают один и тот же объект, даже если priorThing переписывается снова и снова, так как обе функции используют одну и ту же лексическую область видимости. И как только переменная используется в любом из замыканий, то она попадает в лексическую область видимости, используемую всеми замыканиями в этой области видимости. И этот маленький нюанс приводит к мощной утечке памяти.

Циклические ссылки

Рассмотрим пример кода:

Здесь onClick имеет замыкание, в котором сохраняется ссылка на element. НазначивonClick в качестве обработчика события click для element, мы создали циклическую ссылку: element -> onClick -> element -> onClick -> element…

Мастер Йода рекомендует:  Как с помощью JQuery создать простое модальное окно Javascript

Даже если удалить element из DOM, то циклическая ссылка скроет element и onClick от сборщика мусора и произойдет утечка памяти. Как лучше всего избегать возникновения утечек? Управление памятью в JavaScript (и в частности сборка мусора) в значительной степени основано на понятии достижимости объекта. Следующие объекты считаются достижимыми и известны как корневые:

  • ссылки на которые содержатся в стеке вызова (все локальные переменные и параметры функций, которые в настоящий момент вызываются, а также все переменные в области видимости замыкания);
  • все глобальные переменные.

Объекты сохраняется в памяти лишь до тех пор, пока доступны из корневых по ссылке или цепочке ссылок.

В браузерах встроен сборщик мусора, который очищает память от недостижимых объектов. То есть объект будет удалён из памяти только если сборщик мусора решит, что он недостижим. К сожалению, довольно легко могут накопиться неиспользуемые большие объекты, которые считаются «достижимыми».

4. Непонимание равенства

Одним из преимуществ JavaScript является то, что он автоматически преобразует любое значение к булевому значению, если оно используется в булевом контексте. Однако бывают случаи, когда это удобство может ввести в заблуждение:

С учётом последних двух строк, даже будучи пустыми, <> и [] фактически являются объектами. А любой объект в JavaScript соответствует булевому значению true. Однако многие разработчики считают, что значение будет false.

Как показывают два приведённых примера, автоматическое преобразование типа иногда может мешать. Как правило лучше использовать === и !== вместо == и !=, чтобы избежать побочных эффектов преобразования типов.

Кстати, сравнение NaN с чем-либо (даже с NaN!) всегда даст результат false. Таким образом, нельзя использовать операторы равенства (==, ===, !=, !==) для определения соответствия значения NaN. Вместо этого нужно использовать встроенную глобальную функцию isNaN():

5. Правильно использовуйте DOM

В JavaScript можно легко работать с DOM (в том числе добавлять, изменять и удалять элементы), но часто разработчики делают это неэффективно. Например, добавляют серии элементов по одному за раз. Однако операция добавления элементов весьма затратна, и последовательного её выполнения нужно избегать.

Если нужно добавить несколько элементов, то, в качестве альтернативы, можно использовать фрагменты документа:

Также рекомендуем сначала создавать и модифицировать элементы, а потом уже добавлять в DOM, это также существенно повышает производительность.

6. Корректное использование определений функций внутри циклов for

Рассмотрим пример кода:

При клике на любом из 10 элементов появлялось бы сообщение «This is element #10». Причина в том, что к тому времени, когда onclick вызывается любым из элементов, вышестоящий цикл for будет завершён, а значение i будет равно 10.

Пример правильного кода:

makeHandler немедленно запускается на каждой итерации цикла, получает текущее значение i+1 и сохраняет его в переменной num. Внешняя функция возвращает внутреннюю функцию (которая также использует переменную num) и устанавливает ее в качестве обработчика onclick. Это позволяет гарантировать, что каждый onclick получает и использует правильное значение i.

7. Правильное наследование через прототипы

Удивительно много разработчиков не имеют ясного понимания механизма наследования через прототипы. Рассмотрим пример кода:

Но если бы мы написали так:

Но не лучше ли вернуть значение к default? Это можно легко сделать, если применить наследование через прототипы:

Каждый экземпляр BaseObject наследует свойство name своего прототипа, в котором ему присвоено значение default. Таким образом, если конструктор вызван без name, свойствоname по умолчанию будет default. И точно так же, если свойство name будет удалено из экземпляра BaseObject, будет произведен поиск по цепочке прототипов и свойство nameбудет получено из объекта prototype, в котором оно по-прежнему равно default:

8. Создавайте правильные ссылки на методы экземпляров

Определим простой конструктор и с помощью него создадим объект:

Для удобства, создадим ссылку на метод whoAmI:

Выведем значение нашей новой переменной whoAmI:

В консоли будет выведено:

А теперь обратите внимание на разницу при вызовах obj.whoAmI() и whoAmI():

Что пошло не так? Когда мы присвоили var whoAmI = obj.whoAmI;, новая переменная была определена в глобальном пространстве имён. В результате значение this оказалось равнымwindow, а не obj, экземпляру MyObject. Таким образом, если нам действительно нужно создать ссылку на существующий метод объекта, необходимо сделать это в пределах пространства имён этого объекта. Например:

9. Использование строки в качестве первого аргумента в setTimeout или setInterval

Само по себе это не является ошибкой. И дело тут не только в производительности. Дело в том, что когда вы передаете строковую переменную первым аргументом в setTimeout или setInterval, она будет передана конструктору Function для преобразования в новую функцию. Этот процесс может быть медленным и неэффективным. Альтернативой является использование функции в качестве первого аргумента:

10. Отказ от использования «strict mode»

Это режим, в котором накладывается ряд ограничений на исполняемый код, что повышает безопасность и может предотвратить появление некоторых ошибок. Конечно, отказ от использования «строгого режима» не является ошибкой как таковой. Просто в этом случае вы лишаете себя ряда преимуществ:

  • Облегчение процесса отладки. Ошибки в коде, которые были бы проигнорированы или не замечены, приведут к появлению предупреждений и генерации исключений, которые быстрее приведут вас к источнику проблемы.
  • Предотвращение случайного появления глобальных переменных. Присвоение значения необъявленной переменной автоматически создаёт глобальную переменную с таким именем. Это одна из наиболее распространённых ошибок в JavaScript. В «строгом режиме» это приведёт к появлению сообщения об ошибке.
  • Запрет на дублирование названий свойств или значений параметров. Если при включённом «строгом режиме» у объекта обнаруживается дублирование названий свойств (например, var object = 😉 или названий аргументов у функции, то будет выведено сообщение об ошибке. Это позволяет быстро обнаружить и устранить баг.
  • Уменьшение потенциальной опасности eval(). В «строгом режиме» переменные и функции, объявленные внутри eval(), не создаются в текущей области видимости.
  • Получение сообщения об ошибке при ошибочном использовании оператора delete. Этот оператор не может быть применён к свойствам объекта, у которых флагconfigurable равен false, и при попытке это сделать будет выведено сообщение об ошибке.


Чем лучше понимаешь, как и почему работает JavaScript, тем более надёжным будет код, тем эффективнее можно использовать возможности этого языка.

Изучайте нюансы и тонкости языка. Это поможет вам избежать многих распространённых ошибок при написании JavaScript-кода.

10 наиболее распространённых ошибок Java-программистов

Какие ошибки чаще других встречаются у новичков в программировании? Возможно, они всегда путают равенство ( == ) с присвоением ( = ), или & с && ? Или же, возможно, они используют неправильные разделители в цикле for ( for (int i = 0, i )?

Чтобы ответить на этот вопрос, исследователи рассмотрели ошибки более чем 250 000 Java-новичков со всего мира. Используя большое количество данных (исходный код более чем 37 миллионов компиляций, если быть точнее), они выявили наиболее распространенные ошибки студентов, впервые изучавших Java. Также они выяснили, как много времени занимала учёба на собственных ошибках. Результаты оказались поразительными.

The Blackbox data collection project

Изучение нового языка программирования — это всегда вызов, поскольку вы должны научиться выражать свои сложные мысли, используя ограниченную, формальную грамматику. Естественно, многие новички делают ошибки при программировании. Чтобы пролить немного света на то, какие ошибки чаще всего делают новички, исследователи из университета Кента (Великобритания) рассмотрели код, который был собран почти у 265 000 студентов по всему миру.

Проект под названием Blackbox data collection построен на основе BlueJ, бесплатной Java IDE, спроектированной специально для новичков. BlueJ пытается устранить барьеры на пути к успеху для новичков, например, выделяя начало и конец блока кода. Это облегчает студентам процесс визуального сканирования кода на наличие лишних фигурных скобок. Ещё одна особенность данной IDE — это возможность проверки объектов прямо во время работы программы. Таким образом, это помогает пониманию принципов работы программы, а также отладке.

Blackbox также работает как расширение для BlueJ, которое собирает различную анонимную информацию о том, как используется программное обеспечение. К примеру, оно собирает информацию о том, какие функции выполняются и когда, а также с какими ошибками и как часто. Количество данных огромно. Только за один учебный год (2013—2014) было обработано 37 158 094 компиляций, 19 476 087 из которых были успешными, остальные же 17 682 007 — неудачными.

В то время как большинство людей и помыслить не может об обработке такого большого количества данных, Амджад АльТадмри (Amjad Altadmri) и Нейл Браун (Neil Brown) рассмотрели каждый из 46 448 212 файлов, участвовавших в 37 миллионах компиляций, рассмотренных выше. Они также отслеживали изменения в файлах в течение длительного периода времени. При каждой компиляции учёные проверяли исходный код для того, чтобы присвоить ему одну из 18 возможных категорий ошибок (которые они обозначили буквами от А до R). Они также подсчитали количество времени, которое потребовалось студенту для того, чтобы исправить свою ошибку (путём проверки файла, в котором ошибка уже отсутствовала).

10 наиболее распространённых ошибок начинающих Java-программистов

АльТадмри и Браун были удивлены, обнаружив, что те ошибки, которые эксперты и преподаватели считали наиболее распространёнными, таковыми на самом деле не являются.

Это может быть опасной тенденцией, заявили они, так как чаще всего подобные ошибки освещаются и даже лелеются в учебниках.

15–16 ноября, Минск, 133–390 br

Однако, если обратиться к собранным данным, возникает чёткий рейтинг из 10 наиболее часто встречающихся ошибок (буквами от А до R обозначены 18 категорий ошибок, принимавших участие в исследовании):

С. Несбалансированные скобки, фигурные скобки или кавычки, а также использование этих символов попеременно, например: while (a == 0].

I. Вызов методов с неправильными аргументами или типами аргументов, например: list.get(«abc») .

O. Контрольный поток может достигнуть конец non-void метода без возвращения, например:

А. Путаница с операторами присвоения ( = ) и сравнения ( == ), например: if (a = b) .

N. Игнорирование или отбрасывание возвращаемого значения метода с non-void типом возвращения, например: myObject.toString(); .

B. Использование == вместо .equals для сравнения строк.

M. Попытка вызвать non-static метод так, если бы это был static метод, например: MyClass.toString(); .

R. Попытка класса реализовать интерфейс, но отсутствие реализации всех необходимых методов, например: class Y implements ActionListener < >.

P. Вызов типов параметров при вызове метода, например: myObject.foo(int x, String s); .

E. Неправильная расстановка запятых в условиях if , а также циклах for и while , например: if (a == b); return 6; .

Наиболее частая ошибка — это C (забытые скобки, ошибки в их расстановке) — как раз то, чему пытается противостоять BlueJ, используя подсветку. Данный вывод может быть признаком того, что ошибки типа С будут ещё чаще встречаться в IDE, которые не предоставляют никаких средств для отладки.

Удивительно, но следующие ошибки не попали в ТОП-10:

D. Путаница с использованием операторов «короткого замыкания» ( && и || ) и обычных операторов логики ( & и | ).

J. Отсутствие скобок после вызова метода, например: myObject.toString; .

Q. Присваивание переменной значения с типом, несовместимым с типом переменной, например: int x = myObject.toString(); .

F. Неправильные разделители цикла for (использование запятой вместо точки с запятой), например: for (int i=0, i .

H. Использование ключевых слов в качестве имён переменных или методов, например: int new; .

Сколько времени занимает учёба на своих ошибках

Кроме того, когда Браун и АльТадмри изучили, сколько времени требуется, чтобы студенты исправили ошибку, стало ясно, что наиболее распространённая ошибка (ошибка С) была также одной из самых быстронаходимых. Другие ошибки было найти труднее. Среди таких ошибок была путаница между операторами & и | или && и || (ошибка D), использование == вместо .equals для сравнения строк (ошибка B) и игнорирование или отбрасывание возвращаемого значения метода с non-void типом возвращения (ошибка N). Они оставались незамеченными более чем 1 000 секунд (после чего отслеживание не продолжалось) или не были найдены вообще никогда.

Медиана, показывающая соотношение время-исправление (time-to fix), показана на рисунке ниже.

H 10 распространённых ошибок начинающий JavaScript-программистов в черновиках Перевод Tutorial

.collapse»>Содержание

JavaScript считается простым языком программирования. Но впечатления обманчивы. Есть ряд моментов, на которые стоит обратить пристальное внимание. Мы перевели статью для тех, кто только собирается постигать азы JavaScript. Итак, 10 самых самых распространённых ошибок.

1. Отсутствуют фигурные скобки

Пожалуй, главная ошибка всех новичков – отсутствие фигурных скобок после if , else , while и for . Согласно правилам, их действительно можно и не ставить. Но игнорирование скобок часто становится причиной багов.

Отступ у вызова fail() может создать иллюзию, что он относится к if . Но он будет вызываться всегда.

2. Отсутствует точка с запятой

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

Из-за отсутствия точки с запятой в строке 3 интерпретатор думает, что открывающая скобка в пятой строке – это попытка прописать доступ к свойству, а не отдельный массив данных (чего не подразумевает логика программы).
Чтобы не допустить путаницы, проще всегда расставлять знаки самостоятельно. Хотя некоторые разработчики с этим не согласны.

3. Сложности с приведением типов

JavaScript поддерживает динамическую типизацию. Другими словами, тип переменной определяется в момент присвоения значения, а не при объявлении. С одной стороны, это удобно, так как мы можем свободно менять тип переменной во время работы программы, а с другой – приводит к появлению ошибок, которые другие языки отсеивают на стадии компиляции. Вот пример:

Проблема может быть легко исправлена с помощью ParseInt (textbox.value, 10) , превращающего строку в число, прежде чем добавлять к ней 10.
Чтобы избежать неясностей с преобразованием переменных, можно использовать проверку строгого равенства (===), которая позволяет удостовериться в том, что типы обрабатываемых переменных совпадают.

4. Все забывают о var

Var – оператор, объявляющий переменную. Новички очень часто забывают писать его. Javascript великодушно прощает такую невнимательность и объявляет переменные без var как глобальные. Однако в ряде случаев забывчивость может привести к фатальному результату. Вот пример, в котором, помимо var , отсутствует запятая при объявлении нескольких переменных сразу.

Достигнув 4 строки, интерпретатор поставит точку с запятой автоматически, а затем интерпретирует c и d в строке 5 как объявление глобальных переменных. Это приведёт к тому, что значение c станет равным ‘C’, а не 3. Здесь можно почитать подробнее о подводных камнях JavaScript.

5. Арифметические операции с числами с плавающей точкой

Эта ошибка встречается не только в JavaScript, а практически во всех языках программирования. Из-за особенностей записи чисел с плавающей точкой в памяти, арифметические операции между ними могут быть не абсолютно точными. Пример:

Чтобы обойти подобные ошибки стороной, используйте при расчётах лишь целые числа, а не десятичные дроби. Если же вы работаете, скажем, с денежными расчётами, где неизбежно указание десятых и сотых долей целого, используйте такие библиотеки, как bignumber.js.

6. Излишнее использование конструкторов

Когда Java или C# программисты начинают писать на JavaScript, часто используют для создания объектов конструкторы new Array() , new Object() , new String() . Это работает, но иногда может приводить к ошибкам. Пример:

Рекомендуем использовать вместо конструкторов прямое задание массива с помощью [] , <> , «» . Кстати, размер массива задавать заранее не нужно.

7. Непонимание принципов работы области видимости

Область видимости — это участок кода (например, функция), в пределах которого имя переменной продолжает быть связанным с этой переменной и возвращать её значение.
Рассмотрим такой случай:

В данной ситуации выполнение функции откладывается с помощью setTimeout . К тому моменту, как она начинает работу, цикл уже закончится и переменная i будет равна 11.
Закомментированное решение будет работать, так как она копирует i и для каждой функции timeout() .
Материал по теме.

8. Использование Eval

Eval is evil. Не стоит к нему обращаться, если вы не можете чётко объяснить себе, зачем это нужно. Как правило, достичь цели другим способом получается гораздо быстрее и проще.

Код внутри eval представлен строкой, что затрудняет вывод и понимание отладочной информации. Также вам придётся внимательно следить за экранированием кавычек. Наконец, eval попросту работает медленнее, чем аналогичная конструкция на JavaScript.

9. Непонимание принципов асинхронного кода

Уникальным для JavaScript является тот факт, что его код выполняется практически асинхронно, то есть, для того чтобы проследить его выполнение, вам необходимо внимательно изучить стек вызовов. Новичков это обычно ставит в тупик. Вот пример с использованием сервиса для определения вашего местоположения по IP:

Несмотря на то, что вызов console.log расположен в коде после load() , на самом деле его запуск происходит перед извлечением данных.

10. Злоупотребление обработчиками событий


Предположим, вы хотите обрабатывать клик по кнопке, но только при установленном в чекбоксе флажке. Вот как это мог бы сделать начинающий, используя JQuery:

Так делать не стоит. В идеале, каждое событие должно обрабатываться одним обработчиком событий, как, например, это сделано для проверки изменения чекбокса. Но для кнопки будут создаваться дубли обработчиков, которые никогда не будут выгружены из памяти.

10 распространенных ошибок, которые допускают новички.

Приветствую всех в моей очередной статье, посвященной битмейкерам-новичкам. Сейчас я бы хотел поговорить об ошибках, которые, наверное, сам бы в свое время не хотел допускать, хотел бы, чтобы мне о них рассказали в самом начале моего пути. Ну что ж, распишу все по порядку.

Приветствую всех в моей очередной статье, посвященной битмейкерам-новичкам. Сейчас я бы хотел поговорить об ошибках, которые, наверное, сам бы в свое время не хотел допускать, хотел бы, чтобы мне о них рассказали в самом начале моего пути. Ну что ж, распишу все по порядку.

1. Мастеринг — это все!
Очень популярная ошибка в последнее время. Новички считают, что мастеринг исправит все недочеты и их трек сразу же зазвучит по-новому. Это абсолютно не так.

Мастеринг — это шинальная «дошлифовка» вашего трека и она никак не исправит ошибки сведения. Запомните, что все решит сведение, а также не забываем, что многое зависит от самих исходников — звуки синтов/сэмплы должны изначально хорошо звучать и быть качественными.

2. Вырежем все лишнее.
Еще одна ошибка, которую я сам допускал когда-то — это ошибка в эквализации. Допустим у вас есть какой-либо лид. И вы через анализатор определили, что его диапазон, допустим, от 700Гц до 5000Гц и вы начинаете обрезать все, что не входит в пределы данного диапазона. Это большая ошибка. Да, ниже 700Гц и выше 5000Гц это не основная частота лида, но то, что ниже — это его «тело». Убрав его лид потеряет весомость в миксе. А ели обрежем верх — потеряем всю яркость.Тоже касается и хэтов — не стоит урезать им низа «под корень», т.к. хэт также потеряет свое «тело». Достаточно просто ослабить низа.

3. Еще громче!
Еще одно заблуждение — чем громче трек — тем лучше. Это тоже не совсем так. Согласен, что в современной музыке (особенно EDM), идет какая-то бешенная борьба за громкость. Но при таком сильном лимитировании теряется всякая динамика в треке. Такой трек просто неприятен для прослушивания (слышал у нас на сайте несколько trap произведений, которые просто «орали». Не самое приятное чувство). Делайте громкость такой, чтобы не было большого перегруза, и в треке были и громкие, и тихие части.

4. «Я написал пару первых треков в своей жизни — нужно создать паблик вконтакте!»
Тоже проходил через эту тему. Поверьте, первые ваши творения не будут успешными и они никому не понравятся, а вы лишь будете думать, что ваши слушатели ничего не понимают в музыке.

5. «Чем больше у меня VST/VSTi, тем лучше!»
Огромное количество плагинов никак не отразится на качестве ваших композиций. Нужно иметь не много, а столько, сколько нужно. Среди синтезаторов достаточно иметь в арсенале 2-3 штуки с разными свойствами. Например, у меня — это Massive (для мощных звуков), Spire (интересные встроенные эффекты и высокое качество звучания, много волновых таблиц) и Harmor (своеобразный встроенный эффект фейзера и удобная автоматизация всех ручек). Тоже самое касается и эффектов.

6. FL Studio — отстой.
Старый холивар на тему того, что FL Studio — игрушка для детей. С выходом FL Studio 11 этот вопрос стал, по-моему, неактуальным, ведь вся тайна качества треков хранится в ваших ровных руках, а не в чем вы работаете. Конечно, базовые эффекты Image Line оставляют желать лучшего, но есть простое решение — пользоваться сторонними, что я , в принципе, и делаю.

7. «Я пересмотрел кучу обучающего материала, но все равно мои треки не звучат как надо.»
Обучающий материал не даст вам вот так сразу сделать отличный трек, так как все это дело опыта. Только практикой всех ваших теоретических знаний можно добиться каких-то результатов в качестве ваших произведений. И это не месяц, не два и не четыре. Это все приходит годами и только упорной практикой.

8. «Мне не понадобится музыкальная теория.»
Еще одно заблуждение, когда люди думают, что раз они пишут на музыку на компьтере, знание музыки как таковой им не нужно. Я скажу, что это лишь временное утверждение. С прогрессом ваших умений, в один момент встанет такая проблема — «У меня крутые звуки и хорошее сведение, но не интересные мелодии». Что, собственно, произошло и со мной. Я не говорю, что придется вызубрить все до мелочей. Мне лично хватило выучить аккорды и тональности и все пошло в гору. Кстати, изучение теории музыки может дать много вдохновения для новых произведений.

9. «Ну вот получился классный трек, пора на лейбл!»
Когда вам кажется, что у вас получился супер крутой трек, и вы думаете что это точно хит, а музыкой вы занимаетесь год или два — то это заблуждение. Когда-то у меня у самого было такое чувство после написания очередного трека, я начал всем его показывать и раскидал заявки на лейблы. Но теперь с того момента прошло 8 месяцев, и когда я включил этот трек. «Как я мог посчитать этот шлак отличным треком?» — такого мнения сейчас о нем я. Так что не торопитесь выпускаться. Всему свое время.

10. «У меня не получились первые треки, наверное, я брошу это дело. «
Как я уже писал выше — «Первые ваши творения не будут успешными». Так и есть. Ваши первые 10,20 а то и 30 треков будут не особо кого-то впечатлять. Но не стоит отчаиваться. Если ты выбрал этот путь, то иди до конца, и в один момент ты поймешь, какого высокого уровня ты добился.

10 ошибок в SMM, которые допускают даже бренды

Мы проанализировали сообщества, которые соцсеть ВКонтакте самостоятельно отмечает категорией «Брендовых». Даже у таких «монстров» бизнеса иногда случаются осечки.

Наша цель — показать вам ошибки, а не выставить бренды в плохом свете, поэтому все водяные знаки мы «замазали», а цель нашей подборки — исключительно полезный опыт. Предупрежден — значит вооружен. Поехали!

1. Большие полотна текстовой информации

Ну кто не грешил с большими полотнами текста?! Думать, что целевая аудитория ждёт, что мы «выкатим» длинную статью в стиле романа «Война и мир», напрасно. В современном мире, наполненного информационным шумом, подписчик привык расфокусировываться и отсеивать горы ненужной информации. Шанс, что аудитория заинтересуется в длиннющей статье, маловероятен.

2. Роботизированность

Мы согласны, что составление и согласование матрицы Q&A (вопросов и ответов), занимает большое количество времени и сил, а отступление от неё чревато ссорой и недопониманием между агентством и клиентом. Но, положа руку на сердце, нужны ли нам такие однотипные ответы? Стоит ли постараться отвечать разнообразно, но сохранять смысловой посыл? Думаем, да.

3. Отсутствие дизайна

А вы часто экономите на дизайне сообщества и постов? Чаще всего, приоритет данного пункта стремится к нулю, хотя именно визуализация выделяет нас среди других сообществ в ленте новостей, именно она придаёт шарма и изюминке сообществу, это именно то, на что подписчики смотрят в первую очередь.

4. Угодничание

Главное, чтобы понравилось жене начальника. Или её коту. Или хомячку. Слушайте сердце и делайте так, как считаете правильным именно вы, ведь потенциальные заказчики могут не понять вашего пристрастия писать имя жены директора в каждом посте.

5. Введение в заблуждение

Дабы не вводить вас в заблуждение, данный пункт оставим без комментариев.

6. Нарциссизм

Конечно, если пост о генеральном директоре не наберёт пару десятков лайков (а по секрету скажем, что не наберёт), возможно стоит изменить подачу поста на более креативную, или вовсе его не выкладывать в ленту. Но «накручивать» собачек мы явно не рекомендуем.

7. Закрытость

Создание закрытого VIP-супер-лакшери сообщества актуально в нескольких случаях, которые можно пересчитать по пальцам одной руки, но чаще всего это выливается в анекдот про неуловимого Джо. — А почему неуловимого? — Потому что он нафиг никому не нужен.

8. Отсутствие обратной связи

Представляете, что человек действительно захотел заказать товар. Он реально хочет связаться с продавцом. И никак не может. Занавес. Поймай меня, если сможешь.

9. Нечитабельность

Корпоративные цвета — корпоративными цветами, но холодный разум нужно сохранять в первую очередь.

10. Отрицание канонов

Нарушать правила, ломать стереотипы — хорошо, правда получается это лишь у горстки людей со всего мира. А вот известные правила отрицать смысла мы не видим — это всё равно, что пытаться есть кактус с иголками, пытаясь получить истинное удовольствие.

10 ошибок, которые допускают новички в криптовалютах

Стремительный рост курсов криптовалют заставил многих людей задуматься о том, чтобы начать зарабатывать в этой сфере. Криптоинвестор Джон Кризи (Jon Creasy) собрал список самых опасных ошибок, которых стоит избегать новичкам.

Дисклеймер: если немного изменить высказывание Тима Ферриса, то «я НЕ финансовый консультант, поэтому не стоит следовать моим советам, перед этим не пообщавшись с профессионалом. Кроме того, своими результатами я [скорее всего] обязан простому везению и отсутствию навыков». Однако у меня получилось.

Недавно я сидел на новой «Quora для криптовалют» – платформе Cent – и решил спросить единомышленников об их самых страшных ошибках в начале пути. За $10 в ETH-эквиваленте (потому что здесь ответы принято оплачивать) я получил немало интересных примеров.

Лучшие десять из них попали в список ошибок, которых должен изо всех сил избегать любой, кто решил связаться с криптовалютами.

1. Нежелание самостоятельно изучить обстановку

В конце концов, именно вы будете тратить свои кровные на покупку криптовалюты. Если вы не понимаете продукт и его ценность, а только слушаете «экспертов» из Medium, Twitter или Slack, которые говорят всем, когда покупать и продавать валюту, то попадете в большие неприятности и потеряете уйму денег.

Один мой друг с Cent очень метко сказал: «Если ваше решение о покупке валюты зависит от мнения кого-то еще, то вам придется опираться на это мнение и при продаже». Не будьте профаном. Исследуйте рынок, на котором работаете.

2. Начинать майнить, ожидая суперприбыли

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

Проблема в том, что на майнинг нужно очень много электричества – так что оно может того не стоить, если у вас нет доступа к дешевому или бесплатному электричеству. Разве что вы из Сибири, и под боком у вас огромный склад, где можно разместить сотни компьютеров. Но даже при таком раскладе новичкам лучше не заниматься майнингом.

Если вам все-таки хочется этим заняться, задумайтесь о PoS-майнинге или вестировании.

3. Нехватка терпения

Стоит признать, избегать этой ошибки может быть действительно трудно, особенно если вы следите за новостями из мира криптовалют в твиттере. Мы уже вдоволь насмотрелись на сообщения вроде «О ГОСПОДИ КУРС РАСТЕТ ВСЕ ПОКУПАЕМ» или «Так, похоже, биткоину пришел конец, лучше продавать».

Пусть в этих сообщениях и есть доля истины, физически невозможно следить за всем сразу и, в общем-то, выигрывают все равно самые терпеливые. К примеру, мои Decred за два года подорожали на 46 тысяч процентов. Если бы я продал их при цене в $0,20, то потерял бы около $18 тысяч.

Фото: Ethereum World News

Это не значит, что краткосрочная торговля вообще не принесет прибыли. Скорее, наоборот. Но если вы решили играть вкороткую, то разработайте план и придерживайтесь его.

Цитируя моего кумира Уоррена Баффетта, «рынок акций – это механизм передачи денег от нетерпеливых к терпеливым». В этом плане рынки криптовалют и акций очень похожи.

4. Продавать, когда курс «достаточно вырос»

Никогда не знаешь, насколько подорожает тот или иной токен. Я купил Ether по цене около $8, и, нужно признать, желание их продать на отметке $100 было очень сильным. В конечном счете я бы об этом очень пожалел.

Важно составить план по продаже валюты. Нужно наметить себе четкую цель и идти к ней несмотря ни на что. Легко ли мне было смотреть, как портфолио теряет десять тысяч долларов за 36 часов? Конечно, нет. Стал ли я продавать? Отнюдь.

5. Не держать секретные ключи при себе

Это, пожалуй, самая серьезная ошибка из возможных в криптосообществе на сегодня. Сотни миллионов долларов были потеряны из-за того, что люди доверили все свои данные бирже, которая была взломана, или сервису, который перестал работать. Всегда держите свои ключи при себе.

6. Нежелание найти сообщество(-а), у которого можно учиться

Этот пример от ребят с Cent мне особенно понравился. Я сам добился всего благодаря поддержке, вдохновению и знаниям, которыми со мной поделились обитатели потрясающих сообществ. Работать в одиночку – плохая идея. Всем нужны хорошие друзья-криптовалютчики.

Вот некоторые из моих любимых сообществ:


7. Отправить не в тот криптокошелек на бирже

Эту техническую ошибку множество людей допускает очень часто, но исправить это очень легко.

Перепроверяйте, что вы отправляете токены в соответствующий кошелек. Не нужно отправлять BTC в кошелек для ETH. Не нужно отправлять OMG в кошелек для CVC.

Может быть, и нормально отправлять разные токены в кошелек MyEtherWallet, если они соответствуют стандарту ERC20, но класть их в обменные кошельки – большая ошибка. Не теряйте свои деньги. Отправляйте их в правильные кошельки.

8. Не держать физической копии важных данных

Давайте я объясню. Я совершенно точно не советую вам держать все пароли в документе Word на компьютере. Это не физическая копия.

Я имею в виду, что нужно записать все свои пароли, секретные ключи и подобное, распечатать и спрятать в безопасное место. Таким образом, если с вашим компьютером что-то случится, вы сможете восстановить все на другом устройстве.

9. Не использовать 2fa и коды восстановления

Я все понимаю – использование биржи может быть необходимым злом. Однако это не помешает вам использовать двухфакторную аутентификацию везде, где это возможно, и хранить код восстановления где-то на бумаге.

Мне повезло, и я испытал это всего лишь на Mailchimp. Я забыл сохранить код восстановления, и после покупки нового телефона пришлось писать в службу поддержки, чтобы мой аккаунт разблокировали.

Фото: Street Signals

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

10. Страх пропустить что-то важное (FOMO)

Этот страх преследует всех нас. Мысли вроде «если бы только я поучаствовал в том ICO SchmeckleToken» заставляют нас совершать необдуманные решения в будущем, потому что мы боимся пропустить «что-то важное».

Будьте выше этого. Поймите: новые возможности в мире криптовалют появляются каждый день, так что расслабьтесь и пусть этот страх отступит.

10 ошибок, которые часто допускают новички Javascript

По статистике, включающей свыше 10 миллионов часто посещаемых веб-страниц в интернете, около 95% из них прибегают к использованию JavaScript в большей или меньшей степени. Естественно, настолько популярную технологию поддерживают все браузеры: веб-обозреватели на базе Chromium, а также Internet Explorer, Mozilla Firefox, Safari и т. п. Изучение данного языка практически наверняка обеспечит ваше будущее финансами в больших количествах, но стать на путь к успеху следует уже сейчас.

В последнее время активное распространение приобрели фреймворки, написанные на JavaScript. Среди них Angular , React , Node , Express. Часто новички пропускают этап изучения основного языка и просто переходят к использованию функций, заложенных в фреймворки.

Фреймворк – это набор, включающий готовые решения базовых задач, которые ежедневно стоят перед программистами. Задача фреймворков заключается в упрощении разработки, а не вытеснении необходимости знания JavaScript.

Что собой представляет JavaScript и почему он актуален?

Не стоит мне верить на слово, что JS является популярным и востребованным, лучше понимать почему это именно так. Для понимания важности JavaScript придётся вкратце вспомнить о двух неразрывно связанных технологиях веб-программирования – CSS и HTML.

CSS отвечает за визуальное отображение элементов и придания им стилей: размещение, цвет, форма, внешний вид и т. п. HTML позволяет создавать структуру страницы и передавать браузеру информацию о типе контента. Понять суть обоих языков поможет метафора: HTML является скелетом, а CSS – кожей.

Оба языка позволяют создать красивый сайт или отдельную страницу, внешний вид которой ограничен лишь фантазией. При этом они не обеспечивают интерактивность веб-страницы. При каждом клике на кнопку страница должна обновиться, чтобы произошли изменения. JavaScript – это душа сайта, которая делает его интерактивным и живым.

Запросы, отправленные через JS, обрабатываются независимо от состояния страницы, на ней могут сразу показываться результаты работы. Например, пользователь вводит логин, JS отправляет его на сервер и проверяет, есть ли такой же самый ник, затем возвращает ответ на страницу в режиме реального времени. Немаловажно и то, что JS обрабатывается прямо в браузере, создавая минимальную нагрузку на сервер (в отличии от PHP ). Сфер применения JS очень много, поэтому он и является настолько популярным.

Код JavaScript

До сих пор на изучение JavaScript приходится тратить немало сил, это абсолютно нормально. Зато до тех пор, пока есть пользователи у сайтов, будет и спрос на разработчиков в сфере Front-end. Да, передовые компании стараются придумать замену JS. Если подобное и случится, то произойдёт это не скоро. Да и перейти на новый язык со знаниями старого не составит большой сложности.

Обычно JavaScript работает с видимой стороной веб-сайта, но с выходом фреймворка Node.js для серверов, программисты могут выполнять и back-end работы. Таким образом на JS сейчас можно писать и довольно тяжёлый серверный код, выстраивая логику и поведение сайта.

И в заключение

Все разработчики с опытом становятся перед выбором: продолжить работать в офисе с 8-и часовым рабочим днём или заняться фрилансом. Программирование пригождается как крупным компаниям, так и небольшим заказчикам. Достоинства работы в офисе: социальный пакет, наличие спортзала, прямой контакт с командой и обучение от профессионалов. С другой стороны, фриланс позволяет «делать» деньги, не выходя из дома, при чём доход последних может перевешивать ставку офисного сотрудника.

JavaScript является не просто важным языком, но и интересным, а также универсальным. Всем веб-программистам JS является обязательным навыком. При этом JavaScript относительно быстро можно запомнить и изучить. Безусловно, начинающему программисту следует запастись терпением и иметь в распоряжении достаточное количество времени для его изучения. Без увлечённости процессом обучения будет сложно достичь каких-то вершин в данной сфере.

Интерес к работе должен присутствовать, вместе с целеустремлённостью и неотступностью.

SavePearlHarbor

Ещё одна копия хабора

10 распространённых ошибок начинающий JavaScript-программистов

1. Отсутствуют фигурные скобки

Пожалуй, главная ошибка всех новичков – отсутствие фигурных скобок после if , else , while и for . Согласно правилам, их действительно можно и не ставить. Но игнорирование скобок часто становится причиной багов.

Отступ у вызова fail() может создать иллюзию, что он относится к if . Но он будет вызываться всегда.

2. Отсутствует точка с запятой

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

Из-за отсутствия точки с запятой в строке 3 парсер думает, что открывающая скобка в пятой строке – это попытка прописать доступ к свойству, а не отдельный массив данных (чего не подразумевает логика программы).
Чтобы не допустить путаницы, проще всегда расставлять знаки самостоятельно. Хотя некоторые разработчики с этим не согласны.

3. Сложности с приведением типов

JavaScript поддерживает динамическую типизацию. Другими словами, тип переменной определяется в момент присвоения значения, а не при объявлении. С одной стороны, это удобно, так как мы можем свободно менять тип переменной во время работы программы, а с другой – приводит к появлению ошибок, которые другие языки отсеивают на стадии компиляции. Вот пример:

Проблема может быть легко исправлена с помощью ParseInt (textbox.value, 10) , превращающего строку в число, прежде чем добавлять к ней 10.
Чтобы избежать неясностей с преобразованием переменных, можно использовать проверку строгого равенства (===), которая позволяет удостовериться в том, что типы обрабатываемых переменных совпадают.

4. Все забывают о var

Var – оператор, объявляющий переменную. Новички очень часто забывают писать его. Javascript великодушно прощает такую невнимательность и объявляет переменные без var как глобальные. Однако в ряде случаев забывчивость может привести к фатальному результату. Вот пример, в котором, помимо var , отсутствует запятая при объявлении нескольких переменных сразу.

Достигнув 4 строки, парсер поставит точку с запятой автоматически, а затем интерпретирует c и d в строке 5 как объявление глобальных переменных. Это приведёт к тому, что значение c станет равным ‘C’, а не 3. Здесь можно почитать подробнее о подводных камнях JavaScript.

5. Арифметические операции с числами с плавающей точкой

Эта ошибка встречается не только в JavaScript, а практически во всех языках программирования. Из-за особенностей записи чисел с плавающей точкой в памяти, арифметические операции между ними могут быть не абсолютно точными. Пример:

Чтобы обойти подобные ошибки стороной, используйте при расчётах лишь целые числа, а не десятичные дроби. Если же вы работаете, скажем, с денежными расчётами, где неизбежно указание десятых и сотых долей целого, используйте такие библиотеки, как bignumber.js.

6. Излишнее использование конструкторов

Когда Java или C# программисты начинают писать на JavaScript, часто используют для создания объектов конструкторы new Array() , new Object() , new String() . Это работает, но иногда может приводить к ошибкам. Пример:

Рекомендуем использовать вместо конструкторов прямое задание массива с помощью [] , <> , «» . Кстати, размер массива задавать заранее не нужно.

7. Непонимание принципов работы области видимости

Область видимости — это участок кода (например, функция), в пределах которого имя переменной продолжает быть связанным с этой переменной и возвращать её значение.
Рассмотрим такой случай:

В данной ситуации выполнение функции откладывается с помощью setTimeout . К тому моменту, как она начинает работу, цикл уже закончится и переменная i будет равна 11.
Закомментированное решение будет работать, так как она копирует i и для каждой функции timeout() .
Материал по теме.

8. Использование Eval

Eval is evil. Не стоит к нему обращаться, если вы не можете чётко объяснить себе, зачем это нужно. Как правило, достичь цели другим способом получается гораздо быстрее и проще.

Код внутри eval представлен строкой, что затрудняет вывод и понимание отладочной информации. Также вам придётся внимательно следить за экранированием кавычек. Наконец, eval попросту работает медленнее, чем аналогичная конструкция на JavaScript.

9. Непонимание принципов асинхронного кода

Уникальным для JavaScript является тот факт, что его код выполняется практически асинхронно, то есть, для того чтобы проследить его выполнение, вам необходимо внимательно изучить стек вызовов. Новичков это обычно ставит в тупик. Вот пример с использованием сервиса для определения вашего местоположения по IP:

Несмотря на то, что вызов console.log расположен в коде после load() , на самом деле его запуск происходит перед извлечением данных.

10. Злоупотребление обработчиками событий

Предположим, вы хотите обрабатывать клик по кнопке, но только при установленном в чекбоксе флажке. Вот как это мог бы сделать начинающий, используя JQuery:

Так делать не стоит. В идеале, каждое событие должно обрабатываться одним обработчиком событий, как, например, это сделано для проверки изменения чекбокса. Но для кнопки будут создаваться дубли обработчиков, которые никогда не будут выгружены из памяти.

Совет

Один из лучших способов избежать ошибок – использовать JSHint. Некоторые IDE предлагают встроенную интеграцию с этим инструментом, таким образом, код автоматически проверяется в процессе написания.
Надеемся, в нашем топ-10 вы нашли для себя что-то интересное. Всегда рады вашим дополнениям и комментариям.

Мастер Йода рекомендует:  Wi-Fi 6 Wi-Fi Alliance упростила название версий стандарта
Добавить комментарий