JavaScript - очень щадящий язык. Легко написать код, который работает, но содержит ошибки.
В этой статье мы рассмотрим некоторый избыточный код, который мы должны удалить из нашего кода, который мы можем поместить в наши асинхронные функции и другие места.
Нет лишнего return await
В JavaScript асинхронные функции всегда возвращают обещания. Если мы что-то там возвращаем, мы возвращаем обещание, а разрешенное значение - это то, что мы возвращаем в обещании.
return await
ничего не делает, кроме добавления дополнительного времени до того, как обещание будет выполнено или отклонено.
Следовательно, мы можем просто вернуть обещание напрямую.
Единственное допустимое использование return await
- это выражение try...catch
для перехвата ошибок другой функции, возвращающей обещание.
Например, следующий код плохой:
const foo = async () => { return await Promise.resolve(1); }
поскольку нам не нужен await
, чтобы вернуть обещание.
Вместо этого мы можем просто написать:
const foo = async () => { return Promise.resolve(1); }
Однако следующее использование return await
является хорошим:
const foo = async () => { try { return await Promise.resolve(1); } catch (ex) { console.log(ex); } }
Нет URL-адресов скриптов
Наличие javascript:
URL-адреса - плохая практика, потому что это подвергает нас тем же проблемам с производительностью и безопасностью, что и eval
.
Оба они позволяют запускать произвольный код из строки, поэтому злоумышленники могут делать то же самое.
Кроме того, производительность при запуске кода из строки ниже, поскольку интерпретатор JavaScript не может оптимизировать код, который находится в строке.
Например, мы должны написать такой код:
location.href = "javascript:alert('foo')";
Вместо этого просто поместите его в код JavaScript следующим образом:
alert('foo');
Без самостоятельного присвоения
Самостоятельные задания бесполезны. Следовательно, этого не должно быть в нашем коде.
Вероятно, это ошибка, которую мы не обнаружили, когда изменили код.
Например, бесполезны следующие:
a = a;
[a, b] = [a, b];
Вместо этого мы должны написать что-то вроде:
a = b;
[a, b] = [b, a];
Нет самостоятельного сравнения
Сравнение переменной с самой собой всегда возвращает true
. Поэтому использовать такие выражения в нашем коде бесполезно.
Обычно это ошибка при вводе или рефакторинге нашего кода. Это может привести к ошибкам времени выполнения в нашем коде.
Единственный раз, когда может быть уместно сравнить значение с самим собой, - это при сравнении NaN
, поскольку NaN
не совпадает с самим собой по сравнению с оператором ===
.
Но лучше проверить NaN
с помощью функций isNaN
или Number.isNaN
, чтобы проверить NaN
.
isNaN
пытается преобразовать свой аргумент в число перед проверкой на NaN
, а Number.isNaN
просто проверяет значение, не выполняя сначала никаких преобразований типов данных.
Следовательно, у нас не должно быть такого кода:
const a = 1;
if (a === a) {
x = 2;
}
Не используйте оператор запятой
Оператор запятая всегда возвращает последний элемент из списка элементов, разделенных оператором, оценивая их слева направо.
Поэтому использовать этот оператор в нашем коде не очень удобно.
Вероятно, нам следует удалить любое его использование из нашего кода. Так что-то вроде:
const a = (1, 2, 3);
всегда будет устанавливать a
на 3.
Нет никаких допустимых вариантов использования этого оператора в обычной программе.
Только выбросить объект ошибки в выражениях выброса
В JavaScript мы можем поместить любое значение после throw
, когда пытаемся выдать ошибку.
Однако не рекомендуется бросать что-либо, кроме объекта Error
или производного от него дочернего конструктора.
Объект Error
автоматически отслеживает, где был построен и возник объект Error
.
Например, у нас должно быть throw
выражений вроде:
throw "fail";
Вместо этого мы должны написать:
throw new Error("fail");
Заключение
return await
в основном бесполезен, за исключением блоков try...catch
. Сравнение переменной или значения с самими собой в большинстве случаев бесполезно, как и при присвоении переменной самой себе.
Точно так же оператор запятой также бесполезен, поскольку он всегда возвращает последнее значение в списке.
Ошибки, вызывающие исключения, всегда должны вызывать Error
объект или экземпляр его дочернего конструктора.
URL-адреса сценариев в JavaScript также являются плохой практикой, потому что мы запускаем код в строке, что предотвращает любую оптимизацию и может позволить злоумышленникам произвольно запускать наш код.
Примечание из JavaScript In Plain English
Мы запустили три новых издания! Проявите любовь к нашим новым публикациям, подписавшись на них: AI на простом английском, UX на простом английском, Python на простом английском - спасибо и продолжайте учиться!
Мы также всегда заинтересованы в продвижении качественного контента. Если у вас есть статья, которую вы хотите отправить в какую-либо из наших публикаций, отправьте нам электронное письмо по адресу [email protected] с вашим именем пользователя Medium, и мы добавим вас в качестве автора. Также сообщите нам, к каким публикациям вы хотите быть добавлены.