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

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

Что такое анти-шаблон?

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

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

Обратите внимание, что мы не можем указать здесь на все антипаттерны JS, потому что они действительно основаны на вас и на том, насколько вы плохой и не исследовательский парень. В вашей кодовой базе будет расти количество антишаблонов, если вы недостаточно хорошо исследуете. :)

1. Циклы JavaScript

Я могу с уверенностью сказать, что самый распространенный анти-шаблон, который мы использовали в наших кодах, связан с вещами, связанными с циклами, и неправильным выбором for…of, forEach и карты.

Начнем с ужасного использования карты JS:

[1,2,3].map(i => console.log(`Logged to console ${i} times`))
// log
Logged to console 1 times
Logged to console 2 times
Logged to console 3 times

Видите, у нас есть правильный вывод и поведение, которого мы ожидали от этого цикла! так что не так?

Карта JavaScript — это метод массива, предназначенный для перебора массива и возврата массива в качестве вывода и результата вам! согласно описанию MDN, `Метод map() создает новый массив, заполненный результатами вызова предоставленной функции для каждого элемента в вызывающем массиве.`, поэтому это означает, что когда вы хотите иметь массив в качестве вывода вы можете использовать этот метод, как в приведенном ниже примере:

const myArray = [1, 4, 9, 16];
const myMap = myArray.map(x => x * 2);
console.log(myMap);
// expected output: Array [2, 8, 18, 32]

Итак, какова схема входа в консоль 5 раз? Когда вы думаете об этом и вспоминаете метод или HOF, который вы запомнили и использовали ранее в своем коде, просто найдите и прочитайте документацию на официальном сайте и посмотрите, какова цель этого метода и как вы можете использовать его в своем коде. лучше всего, например, мы можем просто войти в консоль с помощью for…of в JavaScript

for (let step = 0; step < 3; step++) {
  // Runs 3 times
  console.log(`Logged to console ${step + 1} times`)
}
// log
Logged to console 1 times
Logged to console 2 times
Logged to console 3 times

2. const, var и пусть

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

В отличие от цикла, этот предмет легче изучить и адаптировать к лучшим практикам.

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

{ 
   var greeting= "Hello" 
}
console.log(greeting);
// log
Hello !!!!!!!!

Так что делать? Просто используйте здесь ключевые слова с блочной областью действия, такие как const и let.

{ 
   let greeting= "Hello" 
}
console.log(greeting);
// log
Uncaught ReferenceError: greetings is not defined

Хорошо, теперь мы перешли от var, а не очередь для const и let, здесь правило такое простое, только пожалуйста не используйте let для объявления переменных, которые не предполагается редактировать и изменять в будущем, вы можете сказать, «Хорошо, я не буду назначать и редактировать, но почему бы не использовать здесь letИменно поэтому люди генерируют в своем коде анти-шаблоны.

// Correct
const THIS_VARIABLE_WILL_NOT_CHANGE = "JS is not weird";
// Wrong
let THIS_VARIABLE_WILL_NOT_CHANGE = "JS is not weird";

3. Unnecessary nesting

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

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

// Bad example! Spot 3 mistakes!

doSomething()
  .then(function (result) {
    // Forgot to return promise from inner chain
    // unnecessary nesting
    doSomethingElse(result)
      .then((newResult) => doThirdThing(newResult));
  })
  .then(() => doFourthThing());
// Forgot to terminate chain with a catch!

Теперь давайте сделаем так, чтобы этот неправильный пример выглядел корректно и соответствовал шаблонам:

doSomething()
  .then(function (result) {
    return doSomethingElse(result);
  })
  .then((/* result ignored */) => doFourthThing())
  .catch((error) => console.error(error));

Вы можете прочитать больше о распространенных ошибках в промисах из документов MDN.

Другие ненужные вложенные вещи обычно случаются, когда вы забываете return и break в JavaScript!

function is_old_aged(age) {
  if (age) {
     if (age > 60) { 
      return 'old' 
     } else {
      return 'young'
     };
  }
}

Я ненавижу эти условия вложенных уровней, потому что ваш код будет жалким после еще 2 уровней вложенных условий, и никто не сможет точно прочитать ваш код, но что делать?

function is_old_aged(age) {
  if (!age) {
     return false;
  }
  return age > 60 ? 'old' : 'young'
}

Намного чище, не так ли?

Подведение итогов

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

Подробнее обо всех функциях и методах JavaScript можно прочитать на официальном сайте MDN.

Другие мои статьи вы можете прочитать по ссылкам ниже:

Ускорение JS:



Основные веб-жизненные показатели:



Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord.