{"componentChunkName":"component---src-templates-post-js","path":"/javascript/kak-ispolzovat-nullish-coalescing-v-javascript/","result":{"pageContext":{"slug":"kak-ispolzovat-nullish-coalescing-v-javascript","content":"\n<p>В этой статье вы узнаете как работать с Nullish Coalsing, а именно оператором нулевого слияния в JavaScript. И чем он отличается от логических операторов. Это первая из цикла статей про ES2020.</p>\n\n\n\n<p class=\"author\"><a href=\"https://medium.com/javascript-in-plain-english/nullish-coalescing-operator-for-javascript-8f502b970ba8\"><em>Перевод статьи How to use the new Nullish Coalescing operator in JavaScript</em></a></p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p><strong>Off topic</strong><em>. Лучше всего оставлять этот термин без перевода, то есть просто Nullish Coalsing. Если использовать русский перевод, то лучше как “оператор нулевого слияния”. Я слышал варианты “нулевой оператор объединения” и “null оператор коалесцирования”. Но это не совсем то, последний вариант вообще ближе к химии, насколько я знаю.</em></p></blockquote>\n\n\n\n<p>Оператор нулевого слияния “<code>??</code>” является нововведением в&nbsp;<strong>ES2020</strong>, которое представляет собой укороченную оценку логического выражения, отдающее правый операнд в случае, если левый операнд является&nbsp;<code>null</code>&nbsp;или&nbsp;<code>undefined</code>, если же нет, то тогда он отдаст левый операнд.</p>\n\n\n\n<p id=\"636d\">Сейчас он находится на 4й стадии рассмотрения, что говорит о том, что он уже готов к внедрению в официальный&nbsp;<a href=\"https://tc39.es/process-document/\">ECMAScript стандарт</a>.</p>\n\n\n\n<p id=\"8202\">Он работает в последних версиях Chrome и Firefox.</p>\n\n\n\n<p id=\"de43\">Вот очень простой пример применения:</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>const team = null ?? 'A team';\nconsole.log(team);\n//A team</code></pre>\n\n\n\n<h2><strong>Что способствовало созданию Nullish Coalescing оператора</strong></h2>\n\n\n\n<p>Конечно же вы уже знаете другие логические операторы, сокращающие вычисления с обработкой типов данных, такие как “<code>&amp;&amp;</code>” и “<code>||</code>”. Эти операторы используются для обработки&nbsp;<strong>truthy</strong>&nbsp;и&nbsp;<strong>falsy</strong>&nbsp;значений. Но сначала, что есть&nbsp;<code>false</code>, а что есть&nbsp;<code>true</code>&nbsp;в JavaScript?</p>\n\n\n\n<p id=\"a38a\">Falsy:</p>\n\n\n\n<p id=\"fa1d\">boolean false</p>\n\n\n\n<p id=\"ade6\">null value</p>\n\n\n\n<p id=\"fa6a\">undefined</p>\n\n\n\n<p id=\"ac88\">Number 0</p>\n\n\n\n<p id=\"4b2d\">Number NaN</p>\n\n\n\n<p id=\"e4d0\">BigInt 0n</p>\n\n\n\n<p id=\"a1ae\">Пустая строка “”</p>\n\n\n\n<p id=\"f65c\">Truthy:</p>\n\n\n\n<p id=\"2c46\">Все значения, кроме предыдущих.</p>\n\n\n\n<p id=\"e128\">Проблема с&nbsp;<code>&amp;&amp;</code>&nbsp;и&nbsp;<code>||</code>&nbsp;операторами в том, что они ориентируются только на&nbsp;<strong>truthy</strong>&nbsp;и&nbsp;<strong>falsy</strong>, что неизбежно приводит к багам. Эти операторы отлично работают с&nbsp;<code>null</code>&nbsp;и&nbsp;<code>undefined</code>&nbsp;значениями, но многие&nbsp;<code>false</code>&nbsp;значения могут привести к неожиданным результатам.</p>\n\n\n\n<p id=\"c737\">В этом примере я хочу, чтобы мы обработали объект, в котором мы выставим свойству&nbsp;<code>enableAudio</code>&nbsp;значение&nbsp;<code>0</code>. И дальше мы выставим дефолтное значение&nbsp;<code>1</code>, потому что нулевое значение интерпретируется как&nbsp;<strong>falsy</strong>.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>const response = {\n     enableAudio : 0\n}\nconst enableAudio = response.enableAudio || 1;\nenableAudio\n//1</code></pre>\n\n\n\n<p id=\"9b13\">Nullish coalescing оператор&nbsp;<code>??</code>&nbsp;очень схож с оператором&nbsp;<code>||</code>, кроме того факта, что он не использует&nbsp;<strong>truthy</strong>&nbsp;при принятии решения. Вместо этого он использует nullish, что говорит о том, что значение должно быть либо&nbsp;<code>null</code>, либо&nbsp;<code>undefined</code>.</p>\n\n\n\n<p id=\"5ced\">В следующем примере переменная&nbsp;<code>enableAudio</code>&nbsp;имеет значение&nbsp;<code>0</code>&nbsp;и с оператором нулевого слияния&nbsp;<code>??</code>, оно обрабатывается не как nullish значение. Следовательно, выражение отдаст левый операнд.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>const response = {\n     enableAudio : 0\n}\nconst enableAudio = response.enableAudio ?? 1;\nenableAudio\n//0</code></pre>\n\n\n\n<p>С оператором&nbsp;<code>||</code>, если бы первый операнд был бы&nbsp;<strong>truthy</strong>, то он бы отдал первый операнд. В другом случае он перешел бы ко второму. C Nullish Coalsing оператором, если первый оператор&nbsp;<strong>falsy</strong>, но не&nbsp;<strong>nullish</strong>, то отдастся false.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>console.log(false || true);//true\nconsole.log(false ?? true);//false</code></pre>\n\n\n\n<p>В следующем примере&nbsp;<code>0</code>&nbsp;воспринимается как&nbsp;<strong>falsy</strong>. Следовательно выражение отдаст второй операнд с оператором&nbsp;<code>||</code>. Но с оператором Nullish Coalescing, ноль не считается&nbsp;<code>null</code>. Следовательно, выражение отдаст первое значение, то есть&nbsp;<code>0</code>.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>console.log(0 || 1); //1\nconsole.log(0 ?? 1); //0</code></pre>\n\n\n\n<p>В следующем примере, если вы попробуете его с оператором&nbsp;<code>||</code>, то результат, полученный вами будет вторым операндом, потому что пустая строка являет собой&nbsp;<strong>falsy</strong>&nbsp;значение. А вот если бы вы использовали Nullish Coalescing оператор, то пустая строка не считалась бы как&nbsp;<code>null</code>&nbsp;и следовательно выражение отдало бы первый операнд.</p>\n\n\n\n<pre class=\"wp-block-code javascript\"><code>console.log('' || 'Hello!');//Hello      \nconsole.log('' ?? 'Hello');//''</code></pre>\n\n\n\n<p>В общем, оператор&nbsp;<code>||</code>&nbsp;обрабатывает значения как&nbsp;<strong>falsy</strong>&nbsp;и&nbsp;<strong>truthy</strong>, а опрератор&nbsp;<code>??</code>&nbsp;обрабатывает их как&nbsp;<strong>nullish</strong>. Это говорит о том, что с оператором&nbsp;<code>||</code>, будет отдан второй операнд, если первый является&nbsp;<code>undefined</code>,&nbsp;<code>null</code>,&nbsp;<code>0</code>,&nbsp;<code>false</code>,&nbsp;<code>NaN</code>&nbsp;или пустой строкой. А вот с оператором&nbsp;<code>??</code>, второй операнд будет отдан только в том случае, если первый является&nbsp;<code>null</code>&nbsp;или&nbsp;<code>undefined</code>.</p>\n\n\n\n<h2 id=\"4227\"><strong>Заключение</strong></h2>\n\n\n\n<p id=\"241d\">Есть очень большое количество багов, которые могут всплыть при использовании&nbsp;<code>||</code>&nbsp;оператора которые вы можете избежать, используя новый оператор nullish coalescing&nbsp;<code>??</code>, а ещё с ним вы вы сможете предотвратить появление большого количества шаблонного кода для подобных проверок.</p>\n","type":"js","date":"2020-12-07T15:29:23.000Z","acf":{"seo_desc":"В этой статье вы узнаете как работать с Nullish Coalsing, а именно оператором нулевого слияния в JavaScript. И чем он отличается от логических операторов","keywords":"Nullish Coalescing, что такое Nullish Coalescing, оператор нулевого слияния","pub_date":"2020-06-29","tags":"Nullish Coalescing, JavaScript"},"title":"Как использовать Nullish Coalescing(оператор нулевого слияния) в JavaScript","id":"3db0e77a-3715-5ed7-86f0-59e0272f5bd3","excerpt":"<p>В этой статье вы узнаете как работать с Nullish Coalsing, а именно оператором нулевого слияния в JavaScript. И чем он отличается от логических операторов. Это первая из цикла статей про ES2020.</p>\n","featured_media":{"source_url":"https://stasonmars.ru/wp/wp-content/uploads/2020/12/DglYtvO7Bn0-9.jpg"},"interesting":[{"title":"Подробное руководство по JSX в React","slug":"podrobnoe-rukovodstvo-po-jsx-v-react","type":"js"},{"title":"Полное понимание синхронного и асинхронного JavaScript с Async/Await","slug":"polnoe-ponimanie-syncronnogo-i-asyncronnogo-javascript-s-async-await","type":"js"},{"title":"Понимаем компоненты высшего порядка в React на реальном примере","slug":"ponimaem-komponenty-vysshego-poryadka-v-react-na-realnom-primere","type":"js"}]}},"staticQueryHashes":["3576131997","63159454"]}