О ужас. Это — самые противные 10 мест в JavaScript, где люди часто ошибаются, особенно по неопытности.
Использование = вместо ==
Из математики все помнят, что знак равенства означает «равно». Но почти во всех языках программирования «=» — это команда присваивания. А знак равенства — «==».
На примере ниже часть в скобках означает не «i равно 10», а «присвой переменной i значение 10». И так как в JavaScript это выражение считается true, то и всё условие будет выполнено вне зависимости от состояния переменной i.
Правильная команда сравнения — «==». Теперь код будет работать так, как мы подразумевали: «Если значение переменной равно десяти, тогда…».
Использование «==» там, где нужно максимально точное сравнение
JavaScript умный, иногда даже слишком. Если предложить ему сравнить число и строку через «==», он сначала преобразует одно в другое и только потом — сравнит. Если нас это устраивает, то окей, но вообще-то число 42 и строка «42» — это разные вещи.
Если нужно сравнить более строго, используется «строгое сравнение» с тремя знаками равенства:
Неверное форматирование вывода
Многие начинающие программисты пользуются командой вывода в консоль console.log (), чтобы узнать текущее состояние работы программы. Но иногда даже такая безобидная команда может стать источником ошибки:
Всё дело в том, что console.log () — это функция, которая работает со строками, а в нашем примере сначала идёт строка, а потом сразу число. Компьютер не понимает, чего от него хотят, поэтому останавливается с ошибкой.
Чтобы исправить ошибку, достаточно поставить плюс между строкой и числом — JavaScript в этом случае сам преобразует наше число в строку, сложит их и будет работать без ошибок:
Название аргумента в функции совпадает с названием переменной
Если мы хотим через функцию поменять значение глобальной переменной, то не стоит указывать её как название аргумента функции. В этом случае значение глобальной переменной не поменяется:
В этом случае something внутри функции — это уже не глобальная переменная, а название аргумента, которое живёт только внутри функции. Чтобы исправить это, достаточно назвать аргумент иначе:
Неточная работа JavaScript с дробными числами
Иногда ошибки возникают не по вине программиста, но про них тоже нужно знать. Если мы просто сложим два дробных числа, то в результате можем получить не то, что ожидаем. В этом примере мы точно не получим 0,3 (хотя казалось бы!):
Причина в том, что дробные числа хранятся в памяти в формате «плавающей запятой» и могут вычисляться на ходу, а это может приводить к появлению лишних значений после запятой. Универсального решения нет, но если вы точно знаете, сколько цифр после запятой вам нужно — сделайте их целыми, а потом разделите на 10 в нужной степени:
Ненумерованные индексы в массиве
Работая с массивом, мы можем обратиться к его элементам только по номерам, а не по названиям, даже если это кажется логичным и правильным:
Правильные решения — либо вместо массива использовать объект, либо использовать массив и номера элементов. В примере — второй вариант:
Несовпадающие кавычки
Вы получите ошибку, если будете использовать разные открывающие и закрывающие кавычки:
var pers = "Осторожно, кавычки закрываются';
Используйте одинаковые кавычки в начале и конце строки:
var pers = "Осторожно, кавычки закрываются";
Несовпадение области видимости
Типичная ошибка начинающих — обращаться к переменным, созданным внутри функции, как будто они глобальные и доступны всегда:
Решение — вынести переменную из функции и сделать её глобальной (если это позволяет логика проекта):
Большие и маленькие буквы в переменных
В JavaScript большие и маленькие буквы — это разные буквы, поэтому нельзя обращаться так к переменной, написанной с большой буквы:
Если в имени переменной, класса, объекта или метода есть большие буквы — нужно писать именно так, как они объявлены первый раз. Благо ваш текстовый редактор подскажет:
Незакрытые скобки
Иногда можно увлечься и не закрыть фигурную скобку, когда закончился логический блок:
Сколько открытых скобок — столько должно быть и закрытых: