<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Onur Dayibasi</title>
    <description>The latest articles on DEV Community by Onur Dayibasi (@odayibasi2).</description>
    <link>https://dev.to/odayibasi2</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1080338%2Fb6e1646e-f3ab-43e1-9584-0dc2fef149b8.jpg</url>
      <title>DEV Community: Onur Dayibasi</title>
      <link>https://dev.to/odayibasi2</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/odayibasi2"/>
    <language>en</language>
    <item>
      <title>React Server Components, Issues, and the Effect on Libraries in the React Ecosystem</title>
      <dc:creator>Onur Dayibasi</dc:creator>
      <pubDate>Thu, 13 Jul 2023 20:44:31 +0000</pubDate>
      <link>https://dev.to/odayibasi2/react-server-components-issues-and-the-effect-on-libraries-in-the-react-ecosystem-4oio</link>
      <guid>https://dev.to/odayibasi2/react-server-components-issues-and-the-effect-on-libraries-in-the-react-ecosystem-4oio</guid>
      <description>&lt;p&gt;The implications and effects of RSC in the React ecosystem have recently been widely explored and stated on many discussions. In this blog, I'll attempt to compile what I notice around me.&lt;/p&gt;

&lt;p&gt;With the introduction of the React Server Component into the React ecosystem, we began to hear many challenges and concerns about the future from various social networking platforms from many people that write libraries.&lt;/p&gt;

&lt;p&gt;React is actually undergoing a major paradigm shift here, which could effect a lot of legacy code. Although this modification appears to be comparable to React Hooks, it is a very different and structural situation. Hooks are an API modification that can be used in old Class Components along Hooks, but the consequences are less noticeable. In RSC, things are a little different.&lt;/p&gt;

&lt;p&gt;React has been tackling Rendering and Interaction Handling since its inception by giving DX (Developer Experience) to app developers through a component-based development framework.&lt;/p&gt;

&lt;p&gt;Things have changed with RSC. How ?&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools for React Bootstrap
&lt;/h2&gt;

&lt;p&gt;To begin with, the CRA, which allows us to easily establish the React project infrastructure, has been abandoned, and if you are going to develop a React project infrastructure, we have moved to an environment that highlights Frameworks like as Next, Remix, and Gatsby. Vite has been hidden in the documentation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IUfhQhaY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bsoig1qjhokse9vo1yx1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IUfhQhaY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bsoig1qjhokse9vo1yx1.png" alt="CRA Notes" width="800" height="1149"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;They also effectively destroyed the CRA (Create React App) side. Of fact, ClientSide application developers are still generating React applications in this location, but it is evident that this section will be phased out after a specific length of time.&lt;/p&gt;

&lt;p&gt;Note: For further information, please see the article linked below.&lt;br&gt;
&lt;a href="https://github.com/reactjs/react.dev/pull/5487"&gt;Replace Create React App recommendation with Vite&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In reality, it is certain that the CRA will no longer be developed beyond late 2021.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Pzr2lQLy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rd5cjch86pjp0kd1g4ws.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Pzr2lQLy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rd5cjch86pjp0kd1g4ws.png" alt="https://github.com/facebook/create-react-app/discussions/11768" width="800" height="1050"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  State Management Libraries
&lt;/h2&gt;

&lt;p&gt;Examine the scenario through the perspectives of State Management library developers.&lt;/p&gt;

&lt;p&gt;Dominik, who is in charge of maintaining the React Query (TanStack/query) library, should read the following blog post in which he discusses the challenges encountered and the future of React Query after RSC.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://tkdodo.eu/blog/you-might-not-need-react-query"&gt;You Might Not Need React Query&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Below is a post written by Lenz Weber, a supporter of Apollo, Redux Toolkit, and RTKQuery, outlining her ideas and concerns regarding RSC.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://phryneas.de/react-server-components-controversy"&gt;My take on the current React &amp;amp; Server Components controversy&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Routing Libraries
&lt;/h2&gt;

&lt;p&gt;Ryan Florence, React Router and Remix Developer, emphasizes that they should be careful while integrating RSC because they are still working and experimenting on it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xDH0cRUd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/phxhdhgt6c54kxzui0vp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xDH0cRUd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/phxhdhgt6c54kxzui0vp.png" alt="Ryan Florence tweet" width="800" height="1168"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tanner Linsley discusses the Tan Stack Router and how various standards should become more prominent in order to make this section RSC compatible. The video shows the RSC perspectives of Solid and Astro Framework developers.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=QRVtu9_xi2k"&gt;Discussion on React server components with Ryan Carniato, Tanner Linsley, &amp;amp; Ben Holmes&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Question of What RSC Is and Isn't
&lt;/h2&gt;

&lt;p&gt;You may find talks regarding what RSC (React Server Component) is everywhere around you.&lt;/p&gt;

&lt;p&gt;Someone mentions RSC output Program, while another mentions VDOM Serialization...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AuJ9k9gJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7bv0ml5zuuc9jt33ej8u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AuJ9k9gJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7bv0ml5zuuc9jt33ej8u.png" alt="The Question of What RSC Is and Isn't" width="800" height="1287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Ideas
&lt;/h2&gt;

&lt;p&gt;We go over RSC in further detail. RSC appears to offer many advantages in the future, but it also appears to cause numerous issues when old scripts fail.&lt;br&gt;
Our mental models and paradigms will shift.&lt;br&gt;
It will take some time for the RSC Standards and associated library development to become established.&lt;br&gt;
Remember to utilize useClient in third-party legacy code and libraries, as React may raise various problems in the background.&lt;br&gt;
Existing libraries began to worry about not being used in the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  LearnReactUI.dev
&lt;/h2&gt;

&lt;p&gt;I'm the founder &lt;a href="https://learnreactui.dev/contents?language=EN"&gt;LearnReactUI.dev&lt;/a&gt;, Don't forget to sign up for LearnReactUI.dev to further your career in the React Ecosystem. This site is a website created for React developers who want to develop a real-world Web Application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9YunM1uy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pcbx78gwe1u93imb7arq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9YunM1uy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pcbx78gwe1u93imb7arq.png" alt="https://learnreactui.dev/contents?language=EN" width="800" height="712"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>rsc</category>
      <category>react</category>
      <category>ecosystem</category>
      <category>problems</category>
    </item>
    <item>
      <title>The Development Of JavaScript Through Time</title>
      <dc:creator>Onur Dayibasi</dc:creator>
      <pubDate>Fri, 12 May 2023 18:03:03 +0000</pubDate>
      <link>https://dev.to/odayibasi2/the-development-of-javascript-through-time-8lk</link>
      <guid>https://dev.to/odayibasi2/the-development-of-javascript-through-time-8lk</guid>
      <description>&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;br&gt;
This particular ebook is only one of several free ones on learnreactui.dev website. For additional free ebooks in pdf format, go to &lt;a href="https://learnreactui.dev/contents?language=EN"&gt;learnreactui.dev&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  1 Beginning
&lt;/h2&gt;

&lt;p&gt;JS Historical Development is separated into two sections.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;First,&lt;/strong&gt; there was the **Browser Era, when JavaScript attempted to exist within browsers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Second:&lt;/strong&gt; The ES6,ES7,ES8,ES9,ES10,ES11,ES12 periods following EcmaScript 5, when JavaScript was possible to operate outside of browsers with Node.JS and on servers and desktops.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  1.1 The Browsers Era
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Brenden Eich:&lt;/strong&gt; is the creator of the JavaScript programming language. He developed it in 1995 while working for Netscape, which is now Mozilla. Over time, his name was changed to &lt;strong&gt;Mocha LiveScript JavaScript&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Doug Crockford:&lt;/strong&gt; JSON (JavaScript Object Notation) was created in 2002. This format, which is a subset of XML, serves as the foundation for both directly supporting JavaScript in the language and interacting with the server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jesse James Garrett:&lt;/strong&gt; defined &lt;strong&gt;Ajax&lt;/strong&gt; in a 2005 paper. The web application's underlying communication technique was async communication with the server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;John Resig:&lt;/strong&gt; In 2006, he created the &lt;strong&gt;JQuery&lt;/strong&gt; library. These were libraries that provided developers with an abstraction that eliminated any browser incompatibilities, as popularized by libraries like Prototype, Dojo, and Mootools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTML5:&lt;/strong&gt; Flash is coming to an end. Another breakthrough for JavaScript occurred when technology developers such as Steve Jobs and Mark Zuckerberg stated that they would not support Flash devices in browsers and that the future was in HTML5, CSS3, and JavaScript.&lt;/p&gt;

&lt;p&gt;With the start of this trend, all plugins that worked in browsers vanished. Java's Applet and JavaFX, Adobe Flash, and Microsoft Silverlight have all but vanished.&lt;/p&gt;
&lt;h3&gt;
  
  
  1.2. ES Period (ES5, ES6, ES7, ES8, ES9, ES10, ES11, ES12)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;NodeJS&lt;/strong&gt; was created in 2009 by Ryan Dahl. This infrastructure, which was constructed by forking Chrome's JavaScript compiler, enables JS to run as a server, that is, outside of the browser. And from then on, JS began to run everywhere. It began to appear everywhere, no longer fitting into the browser that brought it into existence, and the committee began to grow indefinitely. The requirements began to diverge. With this distinction, the language began to be remade in an evolutionary manner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EcmaScript (ES):&lt;/strong&gt; The underlying standard for JavaScript. Since its inception as a browser-based language, this standard has incorporated Flash's ActionScript and Microsoft's JScript. But eventually the best features of other languages were incorporated into JavaScript, and they vanished.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TC39:&lt;/strong&gt; The ES Development committee is made up of several members from browser developers and large Web-related companies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Version:&lt;/strong&gt; Every year, generally in June, a new edition of ES is published, and each year is designated by doubling the previous year's number. For example, language features announced in 2015 are referred to as ES6, language features published in 2016 are referred to as ES7, and language features deployed in 2019 are referred to as ES10. The JS language changes published in 2015, ES6, were extremely different and advanced the language.&lt;/p&gt;

&lt;p&gt;I've included the developments in the JS language based on EcmaScript versions below;&lt;/p&gt;
&lt;h4&gt;
  
  
  1.2.1 ES6 (2015)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;let and const&lt;/li&gt;
&lt;li&gt;Arrow Functions&lt;/li&gt;
&lt;li&gt;Classes&lt;/li&gt;
&lt;li&gt;Default Parameters&lt;/li&gt;
&lt;li&gt;Template Literals&lt;/li&gt;
&lt;li&gt;Destructing Assignments&lt;/li&gt;
&lt;li&gt;Enhanced Object Literals&lt;/li&gt;
&lt;li&gt;For-of Loop&lt;/li&gt;
&lt;li&gt;Promises&lt;/li&gt;
&lt;li&gt;Spread operator&lt;/li&gt;
&lt;li&gt;Set/Map&lt;/li&gt;
&lt;li&gt;Generators&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  1.2.2 ES7 (2016)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Array.prototype.includes&lt;/li&gt;
&lt;li&gt;Exponentiation operator (**)&lt;/li&gt;
&lt;li&gt;Array.prototype.find and Array.prototype.findIndex&lt;/li&gt;
&lt;li&gt;Object.getOwnPropertyDescriptors&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  1.3.3 ES8 (2017)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;String padding&lt;/li&gt;
&lt;li&gt;Object (values,entries)&lt;/li&gt;
&lt;li&gt;Async Functions&lt;/li&gt;
&lt;li&gt;Shared Memory And Atomics&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  1.3.4 ES9 (2018)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Async Iteration&lt;/li&gt;
&lt;li&gt;Rest/Spread&lt;/li&gt;
&lt;li&gt;Promise.prototype.finally&lt;/li&gt;
&lt;li&gt;Regular Expression Improvements&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  1.3.5 &lt;strong&gt;ES10 (2019)&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Array (flat, flatMap)&lt;/li&gt;
&lt;li&gt;Object (fromEntries)&lt;/li&gt;
&lt;li&gt;Optional catch binding&lt;/li&gt;
&lt;li&gt;String (trimStart, trimEnd)&lt;/li&gt;
&lt;li&gt;Symbol (description)&lt;/li&gt;
&lt;li&gt;stable Array (sort)&lt;/li&gt;
&lt;li&gt;Well-formed JSON (stringify)&lt;/li&gt;
&lt;li&gt;Static Field&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  1.3.6. &lt;strong&gt;ES11 (2020)&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;BigInt&lt;/li&gt;
&lt;li&gt;Dynamic import&lt;/li&gt;
&lt;li&gt;Nullish Coalescing&lt;/li&gt;
&lt;li&gt;Optional Chaining&lt;/li&gt;
&lt;li&gt;Promise.allSettled&lt;/li&gt;
&lt;li&gt;String#matchAll&lt;/li&gt;
&lt;li&gt;globalThis&lt;/li&gt;
&lt;li&gt;Module Namespace Exports&lt;/li&gt;
&lt;li&gt;Well defined for-in order&lt;/li&gt;
&lt;li&gt;import.meta&lt;/li&gt;
&lt;li&gt;private fields(#)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  1.3.7 &lt;strong&gt;ES12 (2021)&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Numeric Separators&lt;/li&gt;
&lt;li&gt;String.prototype.replaceAll&lt;/li&gt;
&lt;li&gt;Promise.any() and AggregateError&lt;/li&gt;
&lt;li&gt;Logical Assignment Operators&lt;/li&gt;
&lt;li&gt;Private Class Methods and Accessors&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  1.3.7 &lt;strong&gt;ES13 (2022)&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Await operator at the top-level&lt;/li&gt;
&lt;li&gt;Class field declarations&lt;/li&gt;
&lt;li&gt;Private methods and fields&lt;/li&gt;
&lt;li&gt;Static class fields and private static methods&lt;/li&gt;
&lt;li&gt;RegExp Match Indices&lt;/li&gt;
&lt;li&gt;Ergonomic brand checks for private fields&lt;/li&gt;
&lt;li&gt;.at() function for Indexing&lt;/li&gt;
&lt;li&gt;Temporal function&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  2. JS language improvements in 2015 (ES6)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  2.1 let, const
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;no var → Global Scope&lt;/li&gt;
&lt;li&gt;var → Function Scope&lt;/li&gt;
&lt;li&gt;let/const → Block Scope&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  What is the purpose of the var?
&lt;/h4&gt;

&lt;p&gt;Variable is referred to as var. We store names, messages, numbers, and dates in these variables and conduct actions on them in the software.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8A-W5H66--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sltc2kg30847b5efmtnh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8A-W5H66--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sltc2kg30847b5efmtnh.png" alt="var" width="800" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So what would happen if we never used it as we mentioned below. First of all, you cannot define age; alone. JS needs to recognize it as an assignment so that it can operate. For the others (name, height) JS will create a variable named name in the global scope and assign it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eme06de5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qqn8llmm0p240av9655v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eme06de5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qqn8llmm0p240av9655v.png" alt="Without var" width="800" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As developers, they don't want other people to be able to access the values they save in functions. They just want that function level of processing. Because the var variable is not utilized on the left in the example below, we can see a foo variable that may be used outside of the function.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6fL7u69i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2AL6NGIvbyI_B-HSeUvJkKvQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6fL7u69i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2AL6NGIvbyI_B-HSeUvJkKvQ.png" alt="**the difference of using var**" width="800" height="230"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;the difference of using var&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;However, the variables we declare should always exist, be visible, and be accessible inside the defined scope. This is what we developers always aim for. As the amount of code increases, it becomes impossible to manage accesses outside of this and it is unclear where the variable is modified from.&lt;/p&gt;

&lt;p&gt;A variable declared in the higher scope must be accessible to and used by those in the lower scope. This is a crucial requirement. Already, this is the desired outcome.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T0zx3haj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2A1ws-W7Ud1OX_WbYF-3ulVg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T0zx3haj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2A1ws-W7Ud1OX_WbYF-3ulVg.png" alt="Variable defined in upper scope" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Variable defined in upper scope&lt;/p&gt;
&lt;h4&gt;
  
  
  What do we use let/const for?
&lt;/h4&gt;

&lt;p&gt;We were satisfied with the function scope at this point. It was exclusively used in scope definitions like for/while, if/switch, and functions. However, when our requirement to create code in the form of nested blocks with async/promise, arrow function, and callback grew, var in the function became insufficient.&lt;/p&gt;

&lt;p&gt;Although the var variable on the left side defines the innermost scope, it may also be utilized in the top scope. Instead, we want the inner scope variable to be inaccessible from the outside, as seen on the right side.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XasCJgm6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2AqxOIR1W5N6jMH2P3u9Hdsg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XasCJgm6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2AqxOIR1W5N6jMH2P3u9Hdsg.png" alt="https://miro.medium.com/v2/resize:fit:1400/1*qxOIR1W5N6jMH2P3u9Hdsg.png" width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nested scope definition&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;const&lt;/strong&gt; prevents you from making any assignments to a variable after the initial assignment. This way, if you define a PI constant and someone wants to change it, JS will throw an error.&lt;/p&gt;
&lt;h3&gt;
  
  
  2.2 Arrow Functions
&lt;/h3&gt;

&lt;p&gt;We may argue that we write our arrow functions, or function codes, in a more mathematical language.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Z40OKvJs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7rj6k808qbdg1qdwky8u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z40OKvJs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7rj6k808qbdg1qdwky8u.png" alt="Arrow Functions" width="800" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll believe you're building a math function when we describe how normal functions are defined using arrow functions below. You'll notice that this style of writing makes it easier to create code and improves code readability.&lt;/p&gt;

&lt;p&gt;As instances of alternative Arrow function definitions, consider the following.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No arguments constant function&lt;/li&gt;
&lt;li&gt;A pure function that takes a parameter and returns the answer&lt;/li&gt;
&lt;li&gt;A definition that does not need parameter encapsulation() since it only has one argument&lt;/li&gt;
&lt;li&gt;and so on...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--i9uidRrN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1iwic20fkthv597123eo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i9uidRrN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1iwic20fkthv597123eo.png" alt="Arrow Functions1" width="800" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, how does it improve code readability? If we use the Higher Order Function from above. The following is an example of a normal function.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Yf0rHDhk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xpz3v946ewtvh7rnajox.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Yf0rHDhk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xpz3v946ewtvh7rnajox.png" alt="Arrow Functions2" width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see how easy it is to write the same code in Arrow Function. This is the ES6 Arrow function's power.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hGHLWS4V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/elk947i3kutcxb8ro8qg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hGHLWS4V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/elk947i3kutcxb8ro8qg.png" alt="Arrow Functions3" width="800" height="135"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  extras provided by the arrow function
&lt;/h4&gt;

&lt;p&gt;The following ideas are a little difficult to comprehend. These concepts will be explained further in Deep JS topics. I just wanted to briefly mention them here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note 1:&lt;/strong&gt; There is no constructor or prototype for arrow functions. It does not work with &lt;strong&gt;&lt;em&gt;new&lt;/em&gt;&lt;/strong&gt;. Its aim is not to make an instance of an object.&lt;/p&gt;

&lt;p&gt;Because &lt;strong&gt;Note:2&lt;/strong&gt; arrow functions do not bind &lt;strong&gt;&lt;em&gt;this binding&lt;/em&gt;&lt;/strong&gt;, the lexical scope context does so automatically.&lt;/p&gt;
&lt;h3&gt;
  
  
  2.3 Classes
&lt;/h3&gt;

&lt;p&gt;Although the JS language is not an object-oriented language, OOP (Object Oriented Programming) can provide a language syntax and grammar that will give developers who are acclimated to it a comparable sense.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KPIw_5GP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3pf22v6aqif6asr72dft.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KPIw_5GP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3pf22v6aqif6asr72dft.png" alt="Classes" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now consider the following example. In the background, how does the class structure function?&lt;/p&gt;

&lt;p&gt;In reality, everything continues to function through the prototype. For example, see the two classes listed below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The former is &lt;strong&gt;Shape,&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;whereas the later is derived from &lt;strong&gt;Rectangle.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d_KDbS5m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lrqs7ktx3xf5lynyrb7h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d_KDbS5m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lrqs7ktx3xf5lynyrb7h.png" alt="Rectangle extends Shape" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Despite the fact that Rectangle lacks a method, we may use its parent's sayShape method. So how?. The answer to the inquiry may be deduced from the data structure that has been stored in the background. You can see how the sayShape Rectangle is replicated in Shape under &lt;strong&gt;**proto&lt;/strong&gt;**. By executing chain functions in the javascript language, this prototype may give inheritance. The key is right here.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qlKvSIbf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cea4ks8slbqlz9ktbgls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qlKvSIbf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cea4ks8slbqlz9ktbgls.png" alt="extends" width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2.4 Default Parameters
&lt;/h3&gt;

&lt;p&gt;There are if statements that check if the JavaScript values are always undefined and apply default values to them. In such circumstances, using Default Parameters improves the look and readability of your code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7sfOBKgH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/60tb4x88pfbnphlqdd1q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7sfOBKgH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/60tb4x88pfbnphlqdd1q.png" alt="Default Parameters" width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In certain circumstances, the variable is set a default value at the beginning and subsequently this value is created from the variables provided into it. For example, in the following addition operation, when we pass undefined values, we utilize them from the default parameters.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yKGD8Vmo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u2z4lsb3j6uf47thgusq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yKGD8Vmo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u2z4lsb3j6uf47thgusq.png" alt="Default Parameters1" width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, in the example below, you can see that the default parameter only works when no value is passed and undefined is passed. This is not the case for other falsy values.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aXI_7rCh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dqk8y2beo80r2fsvkn6i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aXI_7rCh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dqk8y2beo80r2fsvkn6i.png" alt="Default Parameters2" width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2.5 Template Literals
&lt;/h3&gt;

&lt;p&gt;The new String definition method is =&amp;gt; &lt;code&gt;backsticks&lt;/code&gt; .&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interpolation:&lt;/strong&gt; Embedding variables into text&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MwsWrYX3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y2fcor00u1mkgsbybqjf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MwsWrYX3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y2fcor00u1mkgsbybqjf.png" alt="Template Literals" width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multiline&lt;/strong&gt; \t \n Instead of these characters for a new line or tab, you can define codes like this&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iTL7jySi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n25ccn2holk9t24d0zkn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iTL7jySi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n25ccn2holk9t24d0zkn.png" alt="Template Literals Multiline" width="800" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Template Tags:&lt;/strong&gt; If you want to create much more complex tag processors. You can use these Template Tags to define structures like DSL (Domain Specific Language) that will parse and operate the generated text according to different defined logic. For example, the &lt;strong&gt;sampleTags&lt;/strong&gt; function below creates a template like this and you can use these templates elsewhere in the code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Zs3RFAL2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/foj28idyapxf9j04tecd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zs3RFAL2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/foj28idyapxf9j04tecd.png" alt="Template Tags" width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2.6 Destructing Assignments
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Destruction&lt;/strong&gt; is a notion that is used instead of the assignment/assign technique we are familiar with to make it easier to access variables in structures we generate (packed) in an object or array. This makes the code more understandable as well as shorter.&lt;/p&gt;

&lt;p&gt;For simplicity and clarity, in the example below you can see how easy it is to access the name and surname in a props object. You can see the same in the array operation. It allows us to make assignments that we would do in many lines one by one in a single line.&lt;/p&gt;
&lt;h4&gt;
  
  
  2.6.1 Obje Deconstruction
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kO88NBFn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/32v4patxbwglaqxr6wmu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kO88NBFn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/32v4patxbwglaqxr6wmu.png" alt="Obje Deconstruction" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  2.6.2 Array Deconstruction
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--80HgD7ED--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vt383l900zifo6ltgbkd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--80HgD7ED--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vt383l900zifo6ltgbkd.png" alt="Array Deconstruction" width="800" height="135"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  2.7 Enhanced Object Literals
&lt;/h2&gt;

&lt;p&gt;As you can see in the code below, we can define the object without a key-value pair. This makes the code more readable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UXV8U0MK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wj9h9tfsi3hl3izj6bqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UXV8U0MK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wj9h9tfsi3hl3izj6bqu.png" alt="Enhanced Object Literals" width="800" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the other example, we can define the object very simply when we use [h] during object initialization in case the variable name is taken from outside.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c7BuUjW---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1bxogtc01dtzvcwccf5l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c7BuUjW---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1bxogtc01dtzvcwccf5l.png" alt="Enhanced Object Literals1" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2.8 For-of Loop
&lt;/h3&gt;

&lt;p&gt;There are different data structures in applications. These are String, Array, LinkList, Set, Map, Trie Tree, Graph etc. When you want to navigate these data structures, we need easier methods than the loops mentioned above. These types of structures increase both the code writing and the readability of the code.&lt;/p&gt;

&lt;p&gt;In the following data structures&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arrays&lt;/li&gt;
&lt;li&gt;Strings&lt;/li&gt;
&lt;li&gt;Maps&lt;/li&gt;
&lt;li&gt;Sets&lt;/li&gt;
&lt;li&gt;DOM data structures&lt;/li&gt;
&lt;li&gt;Symbols&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have made a few examples of this below. A very important point here is that you can use continue/break commands in for...of.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ArXiwiQI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/21jzwtnwdznns7176n8o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ArXiwiQI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/21jzwtnwdznns7176n8o.png" alt="For-of Loop" width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here I would also like to briefly mention the &lt;strong&gt;for...in loop&lt;/strong&gt;. For example, you have an object and you want to return its property, you can use for...in for this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RVVPgw_p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/idzqodts86o4sj9k6dlu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RVVPgw_p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/idzqodts86o4sj9k6dlu.png" alt="For-of Loop1" width="800" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are other methods of accessing the object's property key or entry. &lt;strong&gt;Object.keys()&lt;/strong&gt; and &lt;strong&gt;Object.entries()&lt;/strong&gt; methods can create loops on the results returned as an array.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RQKSD8v1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bnw2ghd6agabrbfb0on3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RQKSD8v1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bnw2ghd6agabrbfb0on3.png" alt="For-of Loop2" width="800" height="135"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2.9 Promises
&lt;/h3&gt;

&lt;p&gt;First of all, we were using Callbacks to handle async calls, these had some problematic parts and Promise structure was introduced to solve them. In short,&lt;/p&gt;
&lt;h4&gt;
  
  
  2.9.1 Callback
&lt;/h4&gt;

&lt;p&gt;You can see how easy it is to create the CallbackHell structure. You can lose readability of the code in a very short time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--caFxrTUS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kz14f6bpsci5c3bk7va7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--caFxrTUS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kz14f6bpsci5c3bk7va7.png" alt="Callback" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  2.9.2 Promise
&lt;/h4&gt;

&lt;p&gt;With Promise structure&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We can get rid of the CallBack Hell structure through the then chain&lt;/li&gt;
&lt;li&gt;We also have the chance to handle &lt;strong&gt;err&lt;/strong&gt; states.&lt;/li&gt;
&lt;li&gt;There is also a &lt;strong&gt;catch block&lt;/strong&gt; to handle all process err state default.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JQtUjWAj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5c5yv54phru39b23v8eb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JQtUjWAj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5c5yv54phru39b23v8eb.png" alt="Promise" width="800" height="319"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2.10 ES Modules
&lt;/h3&gt;

&lt;p&gt;In JavaScript, over the years, we have been working on whether we can gather different module loading methods and specifications under a single standard. With &lt;strong&gt;IIFE, CJS, AMD&lt;/strong&gt;, they thought about how to present module loading methods directly in JS Standards.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JS içerisindeki &lt;strong&gt;built-in&lt;/strong&gt; modül yapısı bu şekilde olmalı.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tüm tarayıcılar&lt;/strong&gt; tarafından desteklenmeli&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asenkron(Async)&lt;/strong&gt; çalışmalı&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When we examine ES Module Syntax, we can see that thanks to &lt;strong&gt;export&lt;/strong&gt; we can easily provide variables and functions (In JavaScript, functions are first-class objects) that we want to share with other modules. Thanks to &lt;strong&gt;import&lt;/strong&gt;, you can see that we can use the variables or constants we want from other modules. You can use it as follows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ES6 Module Syntax&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;export&lt;/li&gt;
&lt;li&gt;export default&lt;/li&gt;
&lt;li&gt;import * as from&lt;/li&gt;
&lt;li&gt;import {def1, def2} from&lt;/li&gt;
&lt;li&gt;import def1 from&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So how do we do this if we want to use it in HTML and not in JS. For this, you can use module as type in the script tag.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6TvJ6CGz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n75xba5i23be4j6fg7x8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6TvJ6CGz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n75xba5i23be4j6fg7x8.png" alt="ES6 Module" width="800" height="90"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2.12 Spread operator
&lt;/h3&gt;

&lt;p&gt;Javascript Spread is the array spread assigned to this section. In a nutshell&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MPqkRM6G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ntczr5o88bdp68x6xmbc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MPqkRM6G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ntczr5o88bdp68x6xmbc.png" alt="Spread operator" width="800" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So this time you have array values in the background and you want to distribute them like values outside the array. 3 dots at the beginning of the object allows this to be distributed, you can use a similar structure in Object.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IXFEEWAH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/blfvz6ptf35pp1m6f6ut.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IXFEEWAH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/blfvz6ptf35pp1m6f6ut.png" alt="Spread operator1" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2.13 Set/Map
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Object bize yetiyordu, Neden Map tipine ihtiyaç duyduk ?
&lt;/h4&gt;

&lt;p&gt;Defining Object is quite simple and we can create the map data structure we want in the form of Key/Value. So why did we need &lt;strong&gt;Map&lt;/strong&gt; data type instead of &lt;strong&gt;Object&lt;/strong&gt;, what can't Object do?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only String/Symbol can be given as object key value.&lt;/li&gt;
&lt;li&gt;We use the &lt;strong&gt;for...in&lt;/strong&gt; method to iterate through Object elements. Another method is to iterate through Object.keys, Object.values or Object.entries methods&lt;/li&gt;
&lt;li&gt;Problem accessing Object elements in order.&lt;/li&gt;
&lt;li&gt;We were checking with undefined to see if there is a value or not.&lt;/li&gt;
&lt;li&gt;Set and Get were directly accessing the object by treating it as &lt;strong&gt;array&lt;/strong&gt; or &lt;strong&gt;.&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;We had to write a function for the number of object elements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pSuuXXjT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q7cbbj1lq86bo4jq6pr1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pSuuXXjT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q7cbbj1lq86bo4jq6pr1.png" alt="Set/Map" width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As it can be understood from the above, developers needed a Data Structure API, even though we can use it like an object map. When we examine the Map API;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="kd"&gt;constructor&lt;/span&gt;

&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;that&lt;/span&gt; &lt;span class="nx"&gt;returns&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="nx"&gt;corresponding&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;Here&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="nx"&gt;can&lt;/span&gt; &lt;span class="nx"&gt;be&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;desired&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Obj&lt;/span&gt; &lt;span class="nx"&gt;etc&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt; 

&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;does&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="nx"&gt;have&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;

&lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;that&lt;/span&gt; &lt;span class="nx"&gt;assigns&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="nx"&gt;corresponding&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;Here&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="nx"&gt;can&lt;/span&gt; &lt;span class="nx"&gt;be&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;desired&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Obj&lt;/span&gt; &lt;span class="nx"&gt;etc&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;elements&lt;/span&gt;

&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;deletes&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="nx"&gt;map&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;

&lt;span class="nx"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;deletes&lt;/span&gt; &lt;span class="nx"&gt;all&lt;/span&gt; &lt;span class="nx"&gt;keys&lt;/span&gt; &lt;span class="nx"&gt;and&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;

&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;returns&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;corresponding&lt;/span&gt; &lt;span class="nx"&gt;types&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;pair&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;mapObj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Loop&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pair&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; = &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Array was enough for us, why did we need Set type?
&lt;/h4&gt;

&lt;p&gt;As you know, Array is a data structure that can be simply defined in JS like Object.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LFfl9pxd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qfd4kgm9yqp1id64ebll.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LFfl9pxd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qfd4kgm9yqp1id64ebll.png" alt="Set" width="800" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But it's not a set. Sets do not contain repeating elements. You can provide unique with &lt;strong&gt;.filter&lt;/strong&gt; to provide this state array. But this means iterating over the whole system again after adding an element.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PXs1Jt-m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a23a4ufv69grzk7e8to2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PXs1Jt-m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a23a4ufv69grzk7e8to2.png" alt="Set1" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead, the &lt;strong&gt;Set&lt;/strong&gt; data structure already offers us this possibility. Set API&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="kd"&gt;constructor&lt;/span&gt;
&lt;span class="nx"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="nx"&gt;değeri&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;mı&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;eleman&lt;/span&gt; &lt;span class="nx"&gt;sayısı&lt;/span&gt;
&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;elemanı&lt;/span&gt; &lt;span class="nx"&gt;silerfor&lt;/span&gt; 

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;setObj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Loop&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here in an important conversion &lt;strong&gt;Arr → Set, Set → Arr&lt;/strong&gt; conversion must be very simple Below you can see how simple these 2 are done in a single line.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[…new Set(arr)]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.14 Generators
&lt;/h3&gt;

&lt;p&gt;Normally, functions terminate in 3 ways.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;completion of the operation of the function.&lt;/li&gt;
&lt;li&gt;return function returning the result&lt;/li&gt;
&lt;li&gt;Returning an error with throw&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Generator treats the function like an iterator and turns it into a mechanism where you can stop and advance the flow within the function. What does this mean? When we call the &lt;strong&gt;sayHello()&lt;/strong&gt; function in the function below, the entire function is executed immediately and the result is returned to you. You can say that async/await functions are not executed immediately. The function is held for async operation and this function type is already executed on the Generator structure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u6WX8Jja--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mo1zmcfn9af945ag4qw6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u6WX8Jja--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mo1zmcfn9af945ag4qw6.png" alt="Generators" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can use the generator function by defining it with * in front of it and specifying the places where you will control the flow with &lt;strong&gt;yield&lt;/strong&gt;, and you can use the flow of the function from the outside with &lt;strong&gt;.next()&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WxXbq3Tg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5yaga2dbcimh896sn1rv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WxXbq3Tg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5yaga2dbcimh896sn1rv.png" alt="Generators1" width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here the operation of 2 function types is shown. In the first one we cannot influence the function execution, while in the generator function we have the control to stop and advance the programme with the iterator.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5bihKKRl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4wmythwlykpc4ovjjpt0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5bihKKRl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4wmythwlykpc4ovjjpt0.png" alt="Generators2" width="800" height="573"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here yield behaves like return, but return returns not only value but also the result of the completion of the function.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BWuDJ_mW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5tw22sykr4etnox5qtgn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BWuDJ_mW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5tw22sykr4etnox5qtgn.png" alt="Generators3" width="800" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PyH9jN1L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hhsa9ehbth2q8gyq89fk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PyH9jN1L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hhsa9ehbth2q8gyq89fk.png" alt="Generators4" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. JS language improvements in 2016 (ES7)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 Array.prototype.includes
&lt;/h3&gt;

&lt;p&gt;Before the Array includes method, we used the Array &lt;strong&gt;indexOf&lt;/strong&gt; method in most places and said that if the value is more than -1, it contains this value. But when we look at it, the purpose of the indexOf method is different. We don't want to know how many elements we want to understand whether the array contains this element&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3rXqdzIw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wkc0nnio6zf4roc890yl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3rXqdzIw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wkc0nnio6zf4roc890yl.png" alt="includes" width="800" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aynı durumu &lt;strong&gt;String&lt;/strong&gt; türünde de görebiliriz.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GPE9Ipn4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pwtgzgzss61qhi6qzr2y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GPE9Ipn4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pwtgzgzss61qhi6qzr2y.png" alt="String" width="800" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3.2 Exponentiation operator (**)
&lt;/h3&gt;

&lt;p&gt;To say 2 over 4, you can use ** commands instead of Math.pow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8mZqdVAn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/skpeeowhxo9hdv7pifdw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8mZqdVAn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/skpeeowhxo9hdv7pifdw.png" alt="Exponentiation" width="800" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3.3 Array.prototype.find and Array.prototype.findIndex
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;find()&lt;/strong&gt; returns the element in the Array that matches the condition&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;findIndex()&lt;/strong&gt; Returns the position, i.e. index, of the element in the Array that matches the condition&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cT5B6bxy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gtatxgg09sdo6h8p8d4b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cT5B6bxy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gtatxgg09sdo6h8p8d4b.png" alt="find" width="800" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3.4 Object.getOwnPropertyDescriptors
&lt;/h3&gt;

&lt;p&gt;The properties of the object's property value give information about &lt;strong&gt;value, writable, configurable, enumerable, get, set&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Hnx0BzqC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t68xtv7idz2ym55x3z58.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Hnx0BzqC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t68xtv7idz2ym55x3z58.png" alt="getOwnPropertyDescriptors" width="800" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. JS language improvements in 2017 (ES8)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 String padding
&lt;/h3&gt;

&lt;p&gt;String allows you to complete up to a certain character.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;whether to complete with a blank character / with a certain pattern.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;padStart/padEnd:&lt;/strong&gt; whether to start/end the fill operation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SuOQhWKU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e5u462f8378v733ckijx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SuOQhWKU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e5u462f8378v733ckijx.png" alt="padding" width="800" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4.2 Object (values, entries)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;values():&lt;/strong&gt; Returns the object's own values in the object as an array.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AgLNdY74--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lxc3lfg3hzthnl9hfbqf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AgLNdY74--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lxc3lfg3hzthnl9hfbqf.png" alt="values" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;entries():&lt;/strong&gt; Returns the object's own values [key,value] as an array.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--shNYjIqb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/smy1vlkj5tz282b8858j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--shNYjIqb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/smy1vlkj5tz282b8858j.png" alt="entries" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4.3 Async Functions
&lt;/h3&gt;

&lt;p&gt;JS provides a number of methods to control the output of async functions, callback, promise and finally async functions&lt;/p&gt;

&lt;h4&gt;
  
  
  4.3.1 Callback
&lt;/h4&gt;

&lt;p&gt;You can see how easy it is to create the CallbackHell structure. You can lose readability of the code in a very short time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Qa8xx2Kg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cmb13etw4geboaqpcglh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Qa8xx2Kg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cmb13etw4geboaqpcglh.png" alt="callback" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  4.3.2 Promise
&lt;/h4&gt;

&lt;p&gt;With Promise structure&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We can get rid of the CallBack Hell structure through the then chain&lt;/li&gt;
&lt;li&gt;We have a chance to handle &lt;strong&gt;err&lt;/strong&gt; states.&lt;/li&gt;
&lt;li&gt;There is also a &lt;strong&gt;catch block&lt;/strong&gt; for all process err state default handle.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ixLlOkeX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7mkjfyfjixx8izcielgh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ixLlOkeX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7mkjfyfjixx8izcielgh.png" alt="Promise" width="800" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4.3.3 Async/Await
&lt;/h3&gt;

&lt;p&gt;Actually, this is a topic I will talk about in the future, but in summary, with the async/await that comes with ES8, you can write your code like a normal synchronous code instead of this then. This time we put a tag in the code. Look, this function is async, this call is asynchronous, wait here with await. You can also use the &lt;strong&gt;try - catch&lt;/strong&gt; mechanism directly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NPWUZSd1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7x6o58ve8yv8on6l4ckl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NPWUZSd1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7x6o58ve8yv8on6l4ckl.png" alt="Async/Await" width="800" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4.4 Shared Memory And Atomics
&lt;/h3&gt;

&lt;p&gt;JavaScript, &lt;strong&gt;shared memory and atomics,&lt;/strong&gt; are capabilities developed to run multi-threaded programming more effectively and efficiently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shared memory&lt;/strong&gt; allows multiple threads to access the same memory region, allowing faster and more efficient communication between threads.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;SharedArrayBuffer&lt;/strong&gt; object is used to create a shared memory buffer that can be accessed by multiple threads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Atomics&lt;/strong&gt; provides a way to perform low-level atomic operations on shared memory locations. These operations are guaranteed to be indivisible and cannot be interrupted by other threads, ensuring that the shared memory is accessed safely and correctly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WsC0sMgk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1jqc5zivek6u1h310ips.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WsC0sMgk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1jqc5zivek6u1h310ips.png" alt="atomics" width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. JS language improvements in 2018 (ES9)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 Async Iteration
&lt;/h3&gt;

&lt;p&gt;It is the ability of &lt;strong&gt;for-await-of loop&lt;/strong&gt;, which can provide iterate on collections asyncly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6MeRllEg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/suk1dcjlqefz8qqyeusd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6MeRllEg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/suk1dcjlqefz8qqyeusd.png" alt="Async Iteration" width="800" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Rest/Spread
&lt;/h3&gt;

&lt;p&gt;The concept of rest is a concept that is frequently used in other languages we already know. For example, I would like to give an example of main, which is the beginning of the application from C, Java languages.&lt;/p&gt;

&lt;p&gt;In the following C programme argc is the number of arguments, argv is the arguments passed in the array. Here, the parameters to be passed to the main function in this argument array are passed to the main function when the programme is first run.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wPsAY6x0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e331bwdulwdtbgia9pzw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wPsAY6x0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e331bwdulwdtbgia9pzw.png" alt="rest" width="800" height="126"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's look at the same in Java programming language.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zvV3G_y7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7yo722kbzeov05v13pdq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zvV3G_y7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7yo722kbzeov05v13pdq.png" alt="spread" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It passes these arguments as parameters as soon as the application starts. Here it gives the possibility to pass 0 or more parameters as an array as varargs(...) in Java language.&lt;/p&gt;

&lt;p&gt;The situation I described above has always been the need to pass an array as a parameter to functions. In the meantime, instead of writing this with [] array, what advantage does it give us to do it with 3 dots (...), that is, rest.&lt;/p&gt;

&lt;p&gt;Let's explain this with an example. Let's have a number array and try to find the results of it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3-Qg5BVk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wvqfopzez9a3wu9hlrf9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3-Qg5BVk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wvqfopzez9a3wu9hlrf9.png" alt="spread2" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's rewrite the code with Rest. As seen in the code below, our function has not changed, but it allows us to pass the parameters to the function as we want without the need for an array object in the caller part.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pL7jHK3_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/foxc4sndvlxfwiarnpr2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pL7jHK3_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/foxc4sndvlxfwiarnpr2.png" alt="rest" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5.3 Promise.prototype.finally
&lt;/h3&gt;

&lt;p&gt;Promise &lt;strong&gt;prototype dependent (then, catch, finally)&lt;/strong&gt; methods &lt;strong&gt;then()&lt;/strong&gt; acts as a conjunction that allows you to create promise chains. catch() allows you to catch errors that were not handled during reject. &lt;strong&gt;finally()&lt;/strong&gt; This method is called when the promise finally completes successfully or unsuccessfully.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TqpF7gYN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bdz3xivb04r294o8ztvc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TqpF7gYN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bdz3xivb04r294o8ztvc.png" alt="Promise.prototype.finally&amp;lt;br&amp;gt;
" width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Svi3BmqS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bqmnvkxx7v67g7ukfra1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Svi3BmqS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bqmnvkxx7v67g7ukfra1.png" alt="Promise.prototype.finally&amp;lt;br&amp;gt;
2" width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5.4 RegExp Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Unicode property escapes,&lt;/li&gt;
&lt;li&gt;named capture groups,&lt;/li&gt;
&lt;li&gt;lookbehind assertions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. JS language improvements in 2019 (ES10)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 Array (flat, flatMap)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;flat()&lt;/strong&gt; converts multidimensional array structures to one-dimensional.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0cgPzTJL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b80e8wa0303vmudmedz2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0cgPzTJL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b80e8wa0303vmudmedz2.png" alt="flat" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;flatMap() i&lt;/strong&gt;se map donen array değerini tek boyutlu bir hale getirir.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t3bOb-X9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/itq21a80d4pv9372ag2i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t3bOb-X9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/itq21a80d4pv9372ag2i.png" alt="flatMap" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6.2 Optional catch binding
&lt;/h3&gt;

&lt;p&gt;Allows you to skip the identifier identifier in the catch block in case you don't need a caught error.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ChhYNhGB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4mxpl5aq9e1f8y5vm5xi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ChhYNhGB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4mxpl5aq9e1f8y5vm5xi.png" alt="catch binding" width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6.3 Object (fromEntries)
&lt;/h3&gt;

&lt;p&gt;It is used to create an object clone via Entries.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P7qfNchH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ovxjdws8w60on2usaa2x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P7qfNchH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ovxjdws8w60on2usaa2x.png" alt="fromEntries" width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6.4 String (trimStart, trimEnd)
&lt;/h3&gt;

&lt;p&gt;If there are spaces at the beginning or end of a string, delete them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xwp2RdQu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v7kpvop0hesgb6l4uavr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xwp2RdQu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v7kpvop0hesgb6l4uavr.png" alt="trimStart, trimEnd" width="800" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6.5 Symbol (description)
&lt;/h3&gt;

&lt;p&gt;In order to better follow and debug the code in the symbol, it has allowed to enter a description.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Sc0CNPRR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jhkzpfrqvg6idn7qf0oy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Sc0CNPRR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jhkzpfrqvg6idn7qf0oy.png" alt="Symbol" width="800" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6.6 Array.prototype.sort() - Stable Sorting
&lt;/h3&gt;

&lt;p&gt;Array structure sort operation was not guaranteed to be stable before ES10 and this difference could vary depending on the JavaScript engine used.&lt;/p&gt;

&lt;p&gt;The sort() operation, which now receives a comparison function, performs the sorting operations according to the negative and positive values returned from here.  And the sorting process is successful.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SqPhhe-6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bjwql10u79q4l2v3ocpp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SqPhhe-6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bjwql10u79q4l2v3ocpp.png" alt="sort" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6.7 Well-formed JSON (stringify)
&lt;/h3&gt;

&lt;p&gt;In previous versions of ECMAScript, the JSON.stringify() method serialised certain data types in ways that did not conform to the JSON specification. For example, NaN, Infinity and -Infinity values were serialised as null and undefined values were omitted entirely.&lt;/p&gt;

&lt;p&gt;With the introduction of the "Well-formed JSON.stringify" feature in ES10, the JSON.stringify() method has been updated to produce JSON output that is more consistent with the JSON specification. This means that NaN, Infinity and -Infinity values are now serialised as "null" and undefined values are serialised as "undefined".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jko-IcBZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nr9ur6t6ekyegwe189e6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jko-IcBZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nr9ur6t6ekyegwe189e6.png" alt=" Well-formed JSON" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6.8 Static Field
&lt;/h3&gt;

&lt;p&gt;The features found in the Java language are slowly coming into the JavaScript language. One of them allows us to create functions directly dependent on the Class definition without creating a Class with a function defined with static with new.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vu5C3g-Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ordhekj29fvzw1u80zr8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vu5C3g-Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ordhekj29fvzw1u80zr8.png" alt="Static Field" width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. JS language improvements in 2020 (ES11)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  7.1 BigInt
&lt;/h3&gt;

&lt;p&gt;JavaScript 2⁵³ - 1 is the maximum number you can represent in JavaScript. &lt;code&gt;Number.MAX_SAFE_INTEGER&lt;/code&gt; is used as the value. This makes the value 9007199254740991. When you do operations on Integer, when you add 2, when you add 4, you can see that it now gives incorrect values. It is no longer possible to perform reliable operations on this number.&lt;/p&gt;

&lt;p&gt;Now you can safely perform your operations with large numbers by adding the n character to the end of the numbers or using the number environment via &lt;strong&gt;BigInt(number)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2vTwJrSm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vl51zaciws9ebfivx16x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2vTwJrSm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vl51zaciws9ebfivx16x.png" alt="BigInt" width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7.2 Dynamic import
&lt;/h3&gt;

&lt;p&gt;As a result, in Modern JavaScript, you could do &lt;strong&gt;import&lt;/strong&gt; operations statically at the top of the JavaScript package.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SdmXaOVx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0wvdexkiv7afp8f2fqn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SdmXaOVx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0wvdexkiv7afp8f2fqn.png" alt="Dynamic import" width="800" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In fact, the above static import is very useful in terms of making the code more reliable and less fragile.&lt;/p&gt;

&lt;p&gt;But on the Web, we need a lot of code not from the beginning of the application, but as we use it.&lt;/p&gt;

&lt;p&gt;In this case, it may be necessary to include some code in your application later, both in terms of a flexible architecture and performance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8YewQpaf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qsgy2alf9sfh0333980c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8YewQpaf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qsgy2alf9sfh0333980c.png" alt="Dynamic import1" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In other words, it does not allow us to import a button dependent, a condition dependent import in our code. But with the Dynamic Import method, it allows you to import and use the Runtime module.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1ClVL840--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xeosdu6lamh5a5jxs68l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1ClVL840--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xeosdu6lamh5a5jxs68l.png" alt="Dynamic import2" width="800" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7.3 Nullish Coalescing
&lt;/h3&gt;

&lt;p&gt;In Normal, when we had a &lt;strong&gt;falsy condition&lt;/strong&gt;, it gave us the other side of the OR operator.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--udKuP8JA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4gs5ulrzwf57z5z3dw0i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--udKuP8JA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4gs5ulrzwf57z5z3dw0i.png" alt="Nullish Coalescing" width="800" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A new operator, &lt;strong&gt;the ?? sign (false, 0 "")&lt;/strong&gt;, which will handle the other part only in the case of undefined and null, but not in all falsy cases, is that it only works in undefined and null cases.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QtLw3MUi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/flatgyzmd7c7uvqxul10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QtLw3MUi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/flatgyzmd7c7uvqxul10.png" alt="Nullish Coalescing2" width="800" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Because concepts such as 0, 0n, false, "" on the left-side may be meaningful in our application. In this case you can use ?&lt;/p&gt;

&lt;h3&gt;
  
  
  7.4 Optional Chaining
&lt;/h3&gt;

&lt;p&gt;JS developers often encounter this type of "&lt;strong&gt;TypeError: Cannot read property "&lt;/strong&gt; error is frequently encountered. The absence of an object in an object during property access causes this type of error. Here, firstly that object must be null checked and such evaluations must be made in an if.&lt;/p&gt;

&lt;p&gt;This creates the need for extra if checks in many parts of the code. (Note: The emergence of languages such as TypeScript and protecting developers from extra if checks is also a method. But JS has introduced the Optional Chaining feature that makes its job easier.&lt;/p&gt;

&lt;p&gt;As can be seen in the example below, we get a TypeError when we want to access a property of a non-existent object.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--COEKmHcA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yn4p7gzi92y6gxs2moeh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--COEKmHcA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yn4p7gzi92y6gxs2moeh.png" alt="Optional Chaining" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Optional Chaining has introduced a method to prevent this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KiTojF1M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1p9bkxfguc4g5hx0hgtt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KiTojF1M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1p9bkxfguc4g5hx0hgtt.png" alt="Optional Chaining2" width="800" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can use the same controlled call in array and function calls.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9rWWsxaO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4hlmze7paowuvyw7kemr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9rWWsxaO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4hlmze7paowuvyw7kemr.png" alt="Optional Chaining3" width="800" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7.5 Promise.allSettled
&lt;/h3&gt;

&lt;p&gt;The allSettled method has been added to Promise methods. It returns a detailed result about the fulfilled and unfulfilled promise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Promise Methods&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In promise &lt;strong&gt;prototype bound (then, catch, finally)&lt;/strong&gt; methods, &lt;strong&gt;then()&lt;/strong&gt; acts as a conjunction that allows you to create promise chains. &lt;strong&gt;catch()&lt;/strong&gt; allows you to catch errors that were not handled during reject. &lt;strong&gt;finally()&lt;/strong&gt; This method is called when the promise finally completes successfully or unsuccessfully.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;(resolve, rejected)&lt;/strong&gt; methods are called after the successful/unsuccessful completion of the promise. Like Promise.resolve(value), Promise.reject(err).&lt;/p&gt;

&lt;p&gt;Methods that manage multiple Promise conditions &lt;strong&gt;(all, race, allSettled)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;all:&lt;/strong&gt; Waits for all Promises to be successfully completed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;race:&lt;/strong&gt; Gets the result of whichever Promise is completed first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;allSettled:&lt;/strong&gt; When all Promise successful and unsuccessful operations are finished, it returns the results with their status.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DBJM7EIt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a2858mmawcw51cu2foem.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DBJM7EIt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a2858mmawcw51cu2foem.png" alt="allSettled" width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7.6 String#matchAll
&lt;/h3&gt;

&lt;p&gt;When using Regular Expression, the word match finds all the words in which this regex occurs, while the related indexes, etc... does not find them, instead it just returns the word. When you need to perform an operation over the indexes of these words, you need to run separate logics. For example, in the parts we want to colour in GitHub LogViewer (&lt;a href="https://onurdayibasi.dev/log-viewer-github-color-support"&gt;Example application&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Colour codes had to be found and changed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aj84uaId--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bmpgatsok287ezlja1b0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aj84uaId--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bmpgatsok287ezlja1b0.png" alt="matchAll" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Above I've also inserted $!$ codes to access these indexes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BHQbKHF6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gw4uq3l742r5o76luvds.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BHQbKHF6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gw4uq3l742r5o76luvds.png" alt="matchAll2" width="800" height="663"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since we do not know which of these colour matches which match, I had to turn to such replace methods.&lt;/p&gt;

&lt;p&gt;MatchAll, on the other hand, allows us to operate our application logic in a better way by returning the reasons for each match with each part in the array.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DL4abmE2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fe4n6tkmdes3txgxugwr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DL4abmE2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fe4n6tkmdes3txgxugwr.png" alt="matchAll3" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7.7 globalThis
&lt;/h3&gt;

&lt;p&gt;Whether JS is running in a browser, server or local, JS Engine creates a Global Execution Context in the working environment and provides access to WebAPI for browsers from this Global Scope. This first Global Execution Context contains a &lt;strong&gt;Global Object&lt;/strong&gt; and this object. JSEngine places this object when it first stands up in the JS execution environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fxUG73mM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5dpngm6wt5gxe9dkzn07.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fxUG73mM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5dpngm6wt5gxe9dkzn07.png" alt="globalThis" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example, Console this and window correspond to the Global Object for JS codes running in the Browser below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iKKCxmHT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0m49524wojebggoa700c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iKKCxmHT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0m49524wojebggoa700c.png" alt="globalThis2" width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the browser and NodeJS Runtime environments, the globalThis variable has been added so that the Global Context can access different Runtimes in the same way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oJw0lfi4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rou868l4nyq6r13fston.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oJw0lfi4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rou868l4nyq6r13fston.png" alt="globalThis3" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7.8 Module Namespace Exports
&lt;/h3&gt;

&lt;p&gt;Allows a module to define a single object that serves as a namespace for all its exports. This feature makes the code more concise and readable when making multiple exports from a module.&lt;/p&gt;

&lt;p&gt;It is created using &lt;strong&gt;export * as&lt;/strong&gt;.  For example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2CooVcIu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b23ujf3yrf5stq1ikk06.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2CooVcIu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b23ujf3yrf5stq1ikk06.png" alt="Exports" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7.9 Well defined for-in order
&lt;/h3&gt;

&lt;p&gt;You usually use &lt;strong&gt;for...in&lt;/strong&gt; when travelling the elements of the object. Since the retention of these elements was not in an array but like a map, there was no guarantee that the order would be during the definition in the Object. With this feature, it is ensured that the elements from this loop give the Object elements in a certain order.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cSJEVfTh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xqiy8zmsj2tfu12l1un0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cSJEVfTh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xqiy8zmsj2tfu12l1un0.png" alt="for-in order" width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7.10 import.meta
&lt;/h3&gt;

&lt;p&gt;Dynamic import additionally provides a meta attribute containing the information of the currently imported module. Currently there is an url attribute inside, representing the URL that the module references.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.11 private fields (#)
&lt;/h3&gt;

&lt;p&gt;Before 2015, it was a problem that these variables (var) functions could be accessed from everywhere. &lt;strong&gt;IIFE functions&lt;/strong&gt; were used for this&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DjEI2Pqr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g1mrrfujfwjo07frfmos.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DjEI2Pqr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g1mrrfujfwjo07frfmos.png" alt="private fields" width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If a function is called immediately and the result/result object is stored in a variable, this type of function is called &lt;strong&gt;IIFE (Immediately invoked function expression)&lt;/strong&gt;. The purpose of this type of functions is to ensure that the variables created in this scope are only accessible in that scope. In general, in libraries such as jQuery, Prototype, the IIFE method is used to avoid conflicting variable names and to perform operations within the scope.&lt;/p&gt;

&lt;h4&gt;
  
  
  7.11.1 Let, Const
&lt;/h4&gt;

&lt;p&gt;With ES6 variables variables, we started to define variables at blog level with &lt;strong&gt;let, const&lt;/strong&gt;. We have become able to create private and public property structures with function module pattern structure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WgpEz3ex--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uiht9lq16huxgi79t1u7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WgpEz3ex--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uiht9lq16huxgi79t1u7.png" alt="Let, Const" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  7.11.2 ES6 Classes
&lt;/h4&gt;

&lt;p&gt;With ES6 Classes, we have been able to create variables that you can create your variables in the Constructor and use them in the functions of the class, but these still did not completely remove accessibility from the outside. All private variables were defined with _ in order to be clear, of course, this structure is not an obstacle to be changed from the outside, the developer was just a variable name definition to increase visibility to inform private variables.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bONGHLOg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lq0nwz5003sgtsf249z1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bONGHLOg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lq0nwz5003sgtsf249z1.png" alt="ES6 Classes" width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or, in order to provide full privacy, it is necessary to define all variables and functions in the constructor method, which is not a correct approach in Class usage.&lt;/p&gt;

&lt;h4&gt;
  
  
  7.11.3 Private Fields
&lt;/h4&gt;

&lt;p&gt;Thanks to the new private field capability, it is possible to define variables that can only be accessed from within the class.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9PTvlhWd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xkpx0m4ct9ktp712j22c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9PTvlhWd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xkpx0m4ct9ktp712j22c.png" alt="Private Fields" width="800" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8. JS language improvements in 2021 (ES12)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  8.1 Numeric Separators
&lt;/h3&gt;

&lt;p&gt;A feature to make numeric values more readable with _ underscore&lt;/p&gt;

&lt;p&gt;For example, let's examine the numbers below. The figures I wrote after comment on the right side are more readable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iXl1eJsi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ujvu7tudc1xeff6j07n2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iXl1eJsi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ujvu7tudc1xeff6j07n2.png" alt="Numeric Separators" width="800" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;,. usage may differ according to languages. Since we only want to format the numbers here, the following representation makes it easier to read the numbers in the code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sINJ2c09--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yvf8tmhpbuhe71nrv4is.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sINJ2c09--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yvf8tmhpbuhe71nrv4is.png" alt="Numeric Separators2" width="800" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In addition to all these, you can also use these brackets in different number definitions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VS-f-bJ_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j9h98tmecstn0wzyelpd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VS-f-bJ_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j9h98tmecstn0wzyelpd.png" alt="Numeric Separators3" width="800" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  8.2 String.prototype.replaceAll
&lt;/h3&gt;

&lt;p&gt;We have added replaceAll to the String prototype ourselves for years.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YU0cYBHg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/htpxbc15wm7cz6pt0c6c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YU0cYBHg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/htpxbc15wm7cz6pt0c6c.png" alt="replaceAll" width="800" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;now this code will come as JS default. In this way, it offers the opportunity to find and change all the words you want to change in the code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nz0NZlGI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8h598ygp4b0i0v4lk4zf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nz0NZlGI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8h598ygp4b0i0v4lk4zf.png" alt="replaceAll2" width="800" height="126"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and result&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0dJa7YpB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zah3vg57s3q1pzdgi0fd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0dJa7YpB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zah3vg57s3q1pzdgi0fd.png" alt="replaceAll3" width="800" height="90"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  8.3 Promise.any() and AggregateError
&lt;/h3&gt;

&lt;p&gt;When I try to process more than one promise together, at least one of them is the Promise call that returns resolve according to the resolve status.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qU04c_Ts--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iklf0wejse12k9adgtyf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qU04c_Ts--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iklf0wejse12k9adgtyf.png" alt="Promise.any" width="800" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AggregateError&lt;/strong&gt; returns multiple errors in an array as AggregateError in case of error as a result of Promise.any.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.4 Logical Assignment Operators
&lt;/h3&gt;

&lt;p&gt;In this section, when assigning a value, we make an if control beforehand and assign according to the state of the value.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logical And Assignment&lt;/li&gt;
&lt;li&gt;Logical Or Assignment&lt;/li&gt;
&lt;li&gt;Nullish coalescing operator.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  8.4.1 Logical And Assignment (&amp;amp;&amp;amp;=)
&lt;/h4&gt;

&lt;p&gt;In Logical And Assignment, if the x value is already a true value, it assigns it. Otherwise it does not assign.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O_gKqG4e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rfbi2hvd9yh3hdz93g48.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O_gKqG4e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rfbi2hvd9yh3hdz93g48.png" alt="Logical And Assignment" width="800" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  8.4.2 Logical Or Assignment (||=)
&lt;/h3&gt;

&lt;p&gt;In Logical Or Assignment, if the x value is already a false value, it assigns it. Otherwise it does not assign.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I4BKsdoU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/urnkybbql90ustnkplw8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I4BKsdoU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/urnkybbql90ustnkplw8.png" alt="Logical Or Assignment" width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  8.4.3 Nullish coalescing operator (??=)
&lt;/h3&gt;

&lt;p&gt;Logical Nullish coalescing performs an assignment only in case of null and undefined.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KunZj9M8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6bqwnhdev4lqggkpllop.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KunZj9M8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6bqwnhdev4lqggkpllop.png" alt="Nullish coalescing operator" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  8.5 Private Class Methods and Accessors
&lt;/h3&gt;

&lt;p&gt;In ES11, the private ability of Class property values has become applicable to methods in the same way. In the following code, getToken can only be used from methods in the class because it is defined as a private method.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lG_axfrH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bw3edswsxc51lqhremv1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lG_axfrH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bw3edswsxc51lqhremv1.png" alt="Private Class Methods" width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It also allows to define getter and setter functions.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. JS language improvements in 2022 (ES13)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  9.1 .at() function for Indexing
&lt;/h3&gt;

&lt;p&gt;We can access types such as String, Array via item or char &lt;strong&gt;[index]&lt;/strong&gt; in the related index. You can now use the .at() function for this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qq_wJieD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pyuj6mhd1ybla39zrhab.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qq_wJieD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pyuj6mhd1ybla39zrhab.png" alt="at indexing" width="800" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  9.2 Array find from last (findLast)
&lt;/h3&gt;

&lt;p&gt;When searching in Array, find(), findIndex() were available. In order to search in reverse, the findLast() and findLastIndex() functions have been added to the Array prototype for the structure you need to search after saying String.reverse.&lt;/p&gt;

&lt;h2&gt;
  
  
  9.3 Error Cause (cause)
&lt;/h2&gt;

&lt;p&gt;To help in the case of unexpected behaviour, errors need to be augmented with contextual information such as error messages and error instance properties to explain what happened at the time. The cause property on the Error object allows us to determine which error caused the other error.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ISTHo9us--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vrbcygedw4j0bwhwr7jf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ISTHo9us--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vrbcygedw4j0bwhwr7jf.png" alt="Error Cause" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  9.4 Await operator at the top-level (await)
&lt;/h3&gt;

&lt;p&gt;Previously the await keyword could only be used in async blocks,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XcjMdfKP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e5ak862pq3g9vzvh5jlj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XcjMdfKP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e5ak862pq3g9vzvh5jlj.png" alt="Await operator" width="800" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can now use it in any way you want from the top level outside this context. There are sample uses about this below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zwXl7NhL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k0efwcvrbw5kb9xsilb8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zwXl7NhL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k0efwcvrbw5kb9xsilb8.png" alt="JQuery lazy import" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  9.5 Class Field Declaration (#)
&lt;/h3&gt;

&lt;p&gt;There is a similar section in the ES11 section, the same one, the part we describe as Private Fields. You can read it again here.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.6 Ergonomic brand checks for Private Fields (in)
&lt;/h3&gt;

&lt;p&gt;In order to check whether the private fields belong to the relevant object, it checks whether it is in that object with the in keyword. In the picture below, it allows the controls of the relevant parts to be done through the private prop.&lt;/p&gt;

&lt;p&gt;Below example taken from this link&lt;br&gt;
&lt;a href="https://plainenglish.io/blog/latest-es13-javascript-features"&gt;https://plainenglish.io/blog/latest-es13-javascript-features&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qQvr-Ies--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wq4h1j62ljn01vsrx9nd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qQvr-Ies--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wq4h1j62ljn01vsrx9nd.png" alt="Private Fields" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  9.7 Class Static Block
&lt;/h3&gt;

&lt;p&gt;It allowed to define static functions and variables in the class. Now it allows to define static block etc. as you want.&lt;/p&gt;

&lt;p&gt;Below Example taken from (&lt;a href="https://plainenglish.io/blog/latest-es13-javascript-features"&gt;https://plainenglish.io/blog/latest-es13-javascript-features&lt;/a&gt;)&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tbobyUZo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rmao8vpoattu4szyu8et.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tbobyUZo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rmao8vpoattu4szyu8et.png" alt="Classic Static Block" width="800" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  9.8 hasOwn
&lt;/h3&gt;

&lt;p&gt;Object.prototype.hasOwnProperty function existed, but it was recommended to use it via prototype. Instead, the .hasOwn function that can be used directly from Object was developed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o6HHtVGK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ztjwnkjw9ts1sletpvu1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o6HHtVGK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ztjwnkjw9ts1sletpvu1.png" alt="hasOwn" width="800" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  9.9 RegExp Match Indices
&lt;/h3&gt;

&lt;p&gt;It is now possible to access extra index data while working only on words via RegExp match. Below you can see the extra indexes when we call /g /dg.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3vvVS99h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7stxw73qmbht62p5vq2y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3vvVS99h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7stxw73qmbht62p5vq2y.png" alt="RegExp Match Indices" width="800" height="286"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>ecmascript</category>
      <category>es6</category>
      <category>news</category>
    </item>
  </channel>
</rss>
