{"componentChunkName":"component---src-templates-post-js","path":"/javascript/5-rasprostranennyh-oshibok-kotorie-delaet-kazhdyi-novyi-programmist-v-javascript/","result":{"pageContext":{"slug":"5-rasprostranennyh-oshibok-kotorie-delaet-kazhdyi-novyi-programmist-v-javascript","content":"\n<p>На самом деле не всё, описанное ниже является ошибками, но если вы будете разбираться с описанными ниже проблемами, то значительно продвинетесь в изучении программирования.</p>\n\n\n\n<p class=\"author\"><em>Перевод статьи&nbsp;</em><a rel=\"noreferrer noopener\" href=\"https://codeburst.io/5-common-mistakes-that-every-new-javascript-programmer-does-d0559770d345\" target=\"_blank\"><em>5 Common mistakes that every new JavaScript programmer does</em></a></p>\n\n\n\n<h2 id=\"e0cb\"><strong>True и False значения</strong></h2>\n\n\n\n<p id=\"9ae2\">Эта одна из самых распространенных ошибок, которую каждый программист делал хотя бы один раз в своей карьере. Давайте посмотрим на код ниже. Но это и не ошибка в общем-то, просто настоятельная рекомендация.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>let foo = 0;\nlet boo = 0;\nif (foo === 0) {\n  boo = 1;\n} else {\n  boo = 2;\n}\n</code></pre>\n\n\n\n<p>Код выше выглядит правильным, так? Так и есть, но есть кое что ещё, что мы можем с ним сделать. Теперь посмотрите дальше:</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>let foo = 0;\nlet boo = 0;\n\nif (!foo) {\n  boo = 1;\n} else {\n  boo = 2;\n}</code></pre>\n\n\n\n<p>Выглядит получше? По факту, нам не нужно проверять&nbsp;<code>0,</code>&nbsp;как на&nbsp;<code>false</code>&nbsp;значение. Мы можем просто проверить в условии&nbsp;<code>!foo</code>, отдаёт ли оно&nbsp;<code>false</code>. Давайте посмотрим на верные и неверные значения в JavaScript:</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>// false значения в JavaScript\nundefined --> \"undefined\" отдаст true, если является строкой\nnull --> \"null\" тоже что и \"undefined\"\n0 --> \"0\" тоже что и \"undefined\"\nfalse --> \"false\" тоже что и \"undefined\"\nNaN --> \"NaN\" тоже что и \"undefined\"\n'' or \"\" --> пустая строка\n// true значения в JavaScript\n\"String\" -->  Любая строка\n&#91;] --> Пустой массив\n{} --> Пустой объект\nfunction() {} --> Пустая функция</code></pre>\n\n\n\n<h2 id=\"3af0\">Условный (тернарный) оператор</h2>\n\n\n\n<p id=\"3ee2\">Каждый программист использовал&nbsp;<code>if</code>&nbsp;условие хотя бы раз в жизни, но в местах где не очень много сложной логики внутри условий, мы можем просто заменить их тернарным оператором.&nbsp;</p>\n\n\n\n<p id=\"3ee2\"><strong>Зачем?</strong>&nbsp;Чтобы избежать писанины 😉 и конечно для удобной читабельности. Давайте посмотрим на тот же пример повыше и сделаем его с использованием тернарного оператора.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>let foo = 0;\nlet boo = 0;\n!foo ? boo = 1 : boo = 2;\n// и ещё лучше\nboo = !foo ? 1 : 2;</code></pre>\n\n\n\n<p>В коде выше, вместо пяти строчек кода, мы просто воспроизвели ту же логику в одной строчке. Давайте посмотрим на другой кусок кода.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>if (любое условие) {\n  ----------------\n  что-то тут происходит\n  ----------------\n  return foo ? true : false;\n}</code></pre>\n\n\n\n<p>С кодом выше все правильно, но вам нужно просто в данном случае постараться избегать тернарного оператора. Как? Посмотрите на код ниже.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>if (любое условие) {\n  ----------------\n  что-то тут происходит\n  ----------------\nreturn foo; // если вы уверены, что foo это булево значение\nreturn !!foo; // если foo может быть чем угодно, но не им\n}</code></pre>\n\n\n\n<p>И так, выше мы видим, что нам не всегда нужен тернарный оператор и не всегда нужно стараться использовать их во вложенном виде.</p>\n\n\n\n<h2 id=\"72e0\"><strong>Проверка равенства</strong></h2>\n\n\n\n<p id=\"0ce0\">Давайте внимательно посмотрим на код, чтобы лучше его понять.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>if (false == 0) {\n  return true;\n} else {\n  return false;\n}\nif (false === 0) {\n  return true;\n} else {\n  return false;\n}</code></pre>\n\n\n\n<p>Оба условия вернут&nbsp;<code>true</code>? Извините, что расстрою вас, но первое условие вернет&nbsp;<code>true</code>, а второе вернет&nbsp;<code>false</code>. Что же это за магия такая? Разница в обоих случаях в одном ‘<code>=</code>’, которое всё меняет в значительной степени. ‘<code>==</code>’ делает проверку на равенство с приведением типов, а ‘<code>===</code>’ смотрит на строгое соответствие.</p>\n\n\n\n<h2 id=\"a242\"><strong>Прибавление и конкатенация</strong></h2>\n\n\n\n<p id=\"2350\">Прибавление и связывание зависят от типа данных пока мы явно не укажем переменные с типом данных в JavaScript.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>var a = 10;\nvar b = '20';\nvar c = 30;\nreturn a + b; // отдаст \"1020\"\nreturn b + c; // отдаст \"2030\"\nreturn a + c; // отдаст 40\n</code></pre>\n\n\n\n<p>Как мы видим на примере выше, если мы попытаемся прибавить строку к целому числу, то это возвратит связанную строку, но в случае с двумя целыми числами вернется сумма обоих.</p>\n\n\n\n<h2 id=\"42cb\"><strong>Использование переменной как ключа в объекте</strong></h2>\n\n\n\n<p id=\"addc\">Есть определенные кейсы, в которых нам нужно использовать переменные как ключи. Давайте посмотрим на пример ниже.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>const a = 1;\nlet b = '';\nif(a) {\n  b = 'first Name';\n} else {\n  b = 'Last Name';\n}\nconst myObject = {\n  b : 'Emily'\n};\nreturn myObject;</code></pre>\n\n\n\n<p>В примере выше мы хотели вернуть объект как&nbsp;<code>{ 'first Name' : 'Emily' }</code>, но что возвращает код это&nbsp;<code>{ b: 'Emily' }&nbsp;</code>из-за того, что&nbsp;<code>b</code>&nbsp;используется как ключ. Чтобы решить эту проблему, мы используем квадратные скобки&nbsp;<code>[]</code>.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>if(a) {\n  b = 'first Name';\n} else {\n  b = 'Last Name';\n}\nconst myObject = {\n  &#91;b] : 'Emily'\n};\nreturn myObject;</code></pre>\n\n\n\n<p>Теперь код возвращает то, что мы хотели —&nbsp;<code>{ 'first Name' : 'Emily' }</code></p>\n","type":"js","date":"2021-01-18T16:28:07.000Z","acf":{"seo_desc":"На самом деле не всё, описанное ниже является ошибками, но если вы будете разбираться с описанными ниже проблемами, то значительно продвинетесь в изучении программирования.","keywords":"ошибки новичков js, javascript ошибки, ошибки новых программистов javascript","pub_date":"2018-04-22","tags":"JavaScript"},"title":"5 распространенных ошибок, которые делает каждый новый программист в JavaScript","id":"5418706f-0eeb-5257-bb3d-021d4c60831e","excerpt":"<p>На самом деле не всё, описанное ниже является ошибками, но если вы будете разбираться с описанными ниже проблемами, то значительно продвинетесь в изучении программирования.</p>\n","featured_media":{"source_url":"https://stasonmars.ru/wp/wp-content/uploads/2021/01/fjdnfkjsnkjlfbsdjhkbsjkhfbdsjfb.jpg"},"interesting":[{"title":"Промисы в JavaScript для чайников","slug":"promisy-v-javascript-dlya-chainikov","type":"js"},{"title":"useEffect(fn, []) это не новый componentDidMount()","slug":"useeffect-eto-ne-novyi-componentdidmount","type":"js"},{"title":"Интересные нововведения в JavaScript ES2021","slug":"interesnie-novovvedeniya-v-javascript-es2021","type":"js"}]}},"staticQueryHashes":["3576131997","63159454"]}