<?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: Ahmad Fathy</title>
    <description>The latest articles on DEV Community by Ahmad Fathy (@ahmadfathy).</description>
    <link>https://dev.to/ahmadfathy</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%2F364533%2Fe2a7e32d-4d25-44ec-84a4-b5432563fb47.jpg</url>
      <title>DEV Community: Ahmad Fathy</title>
      <link>https://dev.to/ahmadfathy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ahmadfathy"/>
    <language>en</language>
    <item>
      <title>Same todo app with different technologies</title>
      <dc:creator>Ahmad Fathy</dc:creator>
      <pubDate>Sun, 25 Jul 2021 05:46:36 +0000</pubDate>
      <link>https://dev.to/ahmadfathy/same-todo-app-with-different-technologies-o48</link>
      <guid>https://dev.to/ahmadfathy/same-todo-app-with-different-technologies-o48</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pjhoyymg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p9rjko7mv1z3117ntss8.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pjhoyymg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p9rjko7mv1z3117ntss8.PNG" alt="Same todo app with different technologies"&gt;&lt;/a&gt;&lt;br&gt;
It is a very simple "todo" app I made it as a challenge to myself.&lt;br&gt;
I can add a lot of features but I want the app to be as simple as possible.&lt;br&gt;
I am sharing to get some feedback on the code.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;h4&gt;
  
  
  JavaScript
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://todo-app-with-javascript.netlify.app/"&gt;preview&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4&gt;
  
  
  Jquery
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://todo-app-with-jquery.netlify.app/"&gt;preview&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4&gt;
  
  
  Vue.js
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://todo-app-with-vue-js.netlify.app/"&gt;preview&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4&gt;
  
  
  React.js
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://todo-app-with-react-js.netlify.app/"&gt;preview&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h4&gt;
  
  
  Angular.js
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://todo-app-with-angular.netlify.app/"&gt;preview&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  source code for all apps
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://github.com/ahmadfathy97/same-todo-app-with-different-technologies"&gt;https://github.com/ahmadfathy97/same-todo-app-with-different-technologies&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>vue</category>
      <category>react</category>
      <category>angular</category>
    </item>
    <item>
      <title>10 JS Projects</title>
      <dc:creator>Ahmad Fathy</dc:creator>
      <pubDate>Wed, 13 Jan 2021 00:32:29 +0000</pubDate>
      <link>https://dev.to/ahmadfathy/10-js-projects-5oj</link>
      <guid>https://dev.to/ahmadfathy/10-js-projects-5oj</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;I love to challenge myself so I decided to make 10 projects with different &lt;strong&gt;JS&lt;/strong&gt; frameworks and libraries as I could.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  1. Text Editor &lt;a href="https://github.com/ahmadfathy97/10-js-projects/tree/text-editor"&gt;code&lt;/a&gt; |  &lt;a href="https://online-text-editor.netlify.app/"&gt;preview&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Vuejs&lt;/li&gt;
&lt;li&gt;codemirror&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. 3d-car &lt;a href="https://github.com/ahmadfathy97/10-js-projects/tree/3d-car"&gt;code&lt;/a&gt; | &lt;a href="https://3d-car.netlify.app/"&gt;preview&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;three.js&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. just smile &lt;a href="https://github.com/ahmadfathy97/10-js-projects/tree/face-recognition"&gt;code&lt;/a&gt; |  &lt;a href="https://just-smile.netlify.app/"&gt;preview&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;face-API&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. calculator (desktop app) &lt;a href="https://github.com/ahmadfathy97/10-js-projects/tree/calculator"&gt;code&lt;/a&gt; | &lt;a href="https://github.com/ahmadfathy97/10-js-projects/releases/download/Calculator/calculator.Setup.1.0.0.exe"&gt;download&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;electron&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. space war (online game) &lt;a href="https://github.com/ahmadfathy97/10-js-projects/tree/space-war"&gt;code&lt;/a&gt; | &lt;a href="https://space-war2.netlify.app/"&gt;preview&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;p5.js&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. covid19 cases &lt;a href="https://github.com/ahmadfathy97/10-js-projects/tree/covid19-cases"&gt;code&lt;/a&gt; | &lt;a href="https://covid19-cases-charts.netlify.app/"&gt;preview&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;chart.js&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7. Twitter Anti Curse (browser extension) &lt;a href="https://github.com/ahmadfathy97/10-js-projects/tree/anti-bad-words"&gt;code&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;javaScript&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8. photos gallery &lt;a href="https://github.com/ahmadfathy97/10-js-projects/tree/photos-gallery"&gt;code&lt;/a&gt; | &lt;a href="https://photos-gallery-preview.herokuapp.com/"&gt;preview&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;expressjs&lt;/li&gt;
&lt;li&gt;mongodb&lt;/li&gt;
&lt;li&gt;cloudinary cloud&lt;/li&gt;
&lt;li&gt;ejs preprocessor&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9. chat app &lt;a href="https://github.com/ahmadfathy97/10-js-projects/tree/chat-app"&gt;code&lt;/a&gt; | &lt;a href="https://chat-app-test.netlify.app/"&gt;preview&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;expressjs&lt;/li&gt;
&lt;li&gt;socket.io&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10. jokes (mobile app) &lt;a href="https://github.com/ahmadfathy97/10-js-projects/tree/jokes-app"&gt;code&lt;/a&gt; | &lt;a href="https://github.com/ahmadfathy97/10-js-projects/releases/download/Calculator/jokes.apk"&gt;dwonload&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;NativeScript&lt;/li&gt;
&lt;li&gt;VueJs&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>What the heck is this?</title>
      <dc:creator>Ahmad Fathy</dc:creator>
      <pubDate>Wed, 22 Apr 2020 06:21:18 +0000</pubDate>
      <link>https://dev.to/ahmadfathy/what-the-hack-is-this-1bb3</link>
      <guid>https://dev.to/ahmadfathy/what-the-hack-is-this-1bb3</guid>
      <description>&lt;h1&gt;
  
  
  Ok I knew it doesn’t make sense, but after finishing this article you will change your mind.
&lt;/h1&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Grab your cup of coffee or your cup of tea or whatever you drink and read this article&lt;/em&gt;
&lt;/h3&gt;




&lt;p&gt;Let’s start with the easiest one &lt;/p&gt;

&lt;h2&gt;
  
  
  Why Math.max() returns &lt;em&gt;-Infinity&lt;/em&gt; and Math.min() returns &lt;em&gt;Infinity&lt;/em&gt;?
&lt;/h2&gt;

&lt;h2&gt;
  
  
  That is because Math.max() uses (-Infinity) as the initial comparant because almost every other value is bigger, that's why when no arguments are given, -Infinity is returned. And the same thing with Math.min() but it uses (infinity) instead of (-infinity).
&lt;/h2&gt;

&lt;p&gt;0.1 + 0.2 == 0.3 // false&lt;br&gt;
That’s not in JavaScript only you can read about it here&lt;br&gt;
&lt;a href="https://0.30000000000000004.com/"&gt;0.30000000000000004.com&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Before we diving into the details you must know three things:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Firstly&lt;/strong&gt; there are two ways to convert the type of your value in JavaScript&lt;br&gt;
The explicit way and we all know this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1234&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                            &lt;span class="c1"&gt;// "1234"&lt;/span&gt;
&lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1234&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                          &lt;span class="c1"&gt;// 1234&lt;/span&gt;
&lt;span class="nb"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                              &lt;span class="c1"&gt;// false &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second way is implicit… and it happens when we use some operators like these (-, +, ==, ||, &amp;amp;&amp;amp;)&lt;br&gt;
&lt;strong&gt;Secondly&lt;/strong&gt; there are three types you can convert to (String, Number, Boolean)&lt;br&gt;
&lt;strong&gt;Thirdly&lt;/strong&gt; there are primitive values like String and reference value like Object&lt;/p&gt;
&lt;h2&gt;
  
  
  So let’s talk about the two ways that we can use to change or convert the primitive values to another type
&lt;/h2&gt;
&lt;h3&gt;
  
  
  convert to &lt;strong&gt;String&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Most of all conversions go as you expect&lt;br&gt;
Implicit way&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="mi"&gt;1234&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;                      &lt;span class="c1"&gt;// "1234"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explicit way&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                     &lt;span class="c1"&gt;// 'true'&lt;/span&gt;
&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                   &lt;span class="c1"&gt;// 'false'&lt;/span&gt;
&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                        &lt;span class="c1"&gt;// '1'&lt;/span&gt;
&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                   &lt;span class="c1"&gt;// '-1.5'&lt;/span&gt;
&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                   &lt;span class="c1"&gt;// 'null'&lt;/span&gt;
&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                        &lt;span class="c1"&gt;// 'undefined'&lt;/span&gt;
&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my symbol&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;     &lt;span class="c1"&gt;// 'Symbol(my symbol)'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Except symbol you can’t convert it with the implicit way it will throw an error&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my symbol&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;                   &lt;span class="c1"&gt;// TypeError is thrown&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  convert to &lt;strong&gt;Boolean&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The result will be true or false&lt;br&gt;
Explicit way&lt;br&gt;
To make it easy everything except this list will be true even if the type of value is a reference type.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                       &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;span class="nb"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                       &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;span class="nb"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                      &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;span class="nb"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;NaN&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                  &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;span class="nb"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                   &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;span class="nb"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                       &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;span class="nb"&gt;Boolean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                                 &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Implicit way&lt;br&gt;
Implicit conversion happens in logical context, or is triggered by logical operators (||, &amp;amp;&amp;amp;, !).&lt;br&gt;
To explain it butter I should make a lot of examples but let’s say for now logical operators return the value of original operands, even if they are not Boolean.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;               &lt;span class="c1"&gt;// 'text'&lt;/span&gt;
&lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;                  &lt;span class="c1"&gt;//12&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To understand it more I extremely recommend &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Logical_operators"&gt;MDN&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  convert to &lt;strong&gt;Number&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Explicit way&lt;br&gt;
When we convert String to number first thing the spaces around the string will removed then after this if the string contains valid number will converted else returning NaN and if the string was empty returning 0&lt;br&gt;
What about null or false the converted to 0&lt;br&gt;
And undefined converted to NaN&lt;br&gt;
true converted to 1&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                   &lt;span class="c1"&gt;// 0&lt;/span&gt;
&lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;              &lt;span class="c1"&gt;// NaN&lt;/span&gt;
&lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                   &lt;span class="c1"&gt;// 1&lt;/span&gt;
&lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                  &lt;span class="c1"&gt;// 0&lt;/span&gt;
&lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; 12 &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                 &lt;span class="c1"&gt;// 12&lt;/span&gt;
&lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;-12.34&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;               &lt;span class="c1"&gt;// -12.34&lt;/span&gt;
&lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                   &lt;span class="c1"&gt;// 0&lt;/span&gt;
&lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; 12s &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                &lt;span class="c1"&gt;// NaN&lt;/span&gt;
&lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                    &lt;span class="c1"&gt;// 123&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Implicit way&lt;br&gt;
It’s triggered by a lot of operators (comparison operators, arithmetic operators, bitwise operators).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1234&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;                               &lt;span class="c1"&gt;// 1234&lt;/span&gt;
&lt;span class="mi"&gt;1234&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1234&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;                  &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;                                &lt;span class="c1"&gt;//  false&lt;/span&gt;
&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;                                &lt;span class="c1"&gt;// infinity because null will be 0&lt;/span&gt;
&lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;                            &lt;span class="c1"&gt;//  1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Notes:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;== does not trigger numeric conversion when both operands are strings.&lt;/li&gt;
&lt;li&gt;+ does not trigger numeric conversion, when any operand is a string.&lt;/li&gt;
&lt;li&gt;symbol doesn’t convert with implicit or explicit way.&lt;/li&gt;
&lt;li&gt;null equals only to null or undefined, and does not equal to anything else.&lt;/li&gt;
&lt;li&gt;NaN does not equal to anything even itself&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ok now we are going to explain what happen when we convert the reference type?
&lt;/h2&gt;

&lt;p&gt;As we said before there are only three types to convert to (Boolean, String, Number)&lt;br&gt;
We can’t convert reference types with the explicit way except in special cases like when the array has one element and when we dealing with date&lt;/p&gt;

&lt;h3&gt;
  
  
  So let’s go with implicit way
&lt;/h3&gt;

&lt;p&gt;When we convert the reference type there are few steps happening behind the scene&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check If the input is already a primitive if it is, do nothing and return it.&lt;/li&gt;
&lt;li&gt;Call input.toString(), if the result is primitive, return it.&lt;/li&gt;
&lt;li&gt;Call input.valueOf(), if the result is primitive, return it.&lt;/li&gt;
&lt;li&gt;If neither input.toString() nor input.valueOf() yields primitive, throw TypeError.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Numeric conversion first calls the step (3) followed by step (2). &lt;br&gt;
String conversion does the opposite step (2) followed by step (3).&lt;br&gt;
&lt;strong&gt;Note&lt;/strong&gt;&lt;br&gt;
_ Most built-in types do not have valueOf, or have valueOf returning this object itself, so it’s ignored because it’s not a primitive. That’s why numeric and string conversion might work the same — both end up calling toString()._&lt;/p&gt;

&lt;h2&gt;
  
  
  let's take some examples
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="dl"&gt;""&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;05&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;false&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So now you can tell me the explanation for every single code in the picture&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Is it good to use events like “onkeyup” to make requests?</title>
      <dc:creator>Ahmad Fathy</dc:creator>
      <pubDate>Tue, 21 Apr 2020 01:59:36 +0000</pubDate>
      <link>https://dev.to/ahmadfathy/is-it-good-to-use-events-like-onkeyup-to-make-requests-ia1</link>
      <guid>https://dev.to/ahmadfathy/is-it-good-to-use-events-like-onkeyup-to-make-requests-ia1</guid>
      <description>&lt;h2&gt;
  
  
  Why are we using events like "onkeyup"?
&lt;/h2&gt;

&lt;p&gt;Well, It’s better from UX (user experience) side, You just hit the letters and walah here is you result.&lt;br&gt;
But there is an issue here…&lt;/p&gt;
&lt;h2&gt;
  
  
  First of all let’s see how to make a request with &lt;strong&gt;“onkeyup”&lt;/strong&gt; event?
&lt;/h2&gt;
&lt;h3&gt;
  
  
  &lt;em&gt;Let’s fetch some dad jokes…&lt;/em&gt;
&lt;/h3&gt;




&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"search"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"search-box"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"search-result"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;searchBox&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#search-box&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nx"&gt;searchResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#search-result&lt;/span&gt;&lt;span class="dl"&gt;"&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;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;Accept&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;searchBox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onkeyup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&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="nx"&gt;trime&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&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;searchText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&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="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://icanhazdadjoke.com/search?term=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;searchText&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;searchResult&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;joke&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;searchResult&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;li&amp;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;joke&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;joke&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="p"&gt;})&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;&lt;em&gt;cOo0O0ol all things go just fine.&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;But&lt;/strong&gt; when you type a letter and type another one no matter how fast you are (&lt;em&gt;except if you are faster than eminem&lt;/em&gt;)there are two requests have been sent and you actually just want the last one but the first one maybe is pending in the background and maybe it isn’t completed yet and that is not a good thing for performance.&lt;/p&gt;
&lt;h2&gt;
  
  
  So what can we do to abort the previous request?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;We can use AbortController&lt;/strong&gt;&lt;br&gt;
A controller is an extremely simple object.&lt;br&gt;
It has a single method abort(), and a single property signal.&lt;br&gt;
When abort() is called:&lt;br&gt;
abort event triggers on controller.signal&lt;br&gt;
controller.signal.aborted property becomes true.&lt;/p&gt;
&lt;h2&gt;
  
  
  so we will make a little change in the code
&lt;/h2&gt;

&lt;p&gt;we will add this line before the function&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;controller&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and we will add this if statement on the function to abort the previous request if the controller is not null&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;searchBox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onkeyup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;abort&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// the rest of the code&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we will add last two lines of code after if statement&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;searchBox&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onkeyup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;abort&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;controller&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;AbortController&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;signal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// the rest of the code&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now when we type a letter and type another one before the first request done, the first request will be canceled&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W-inXK5f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://drive.google.com/uc%3Fexport%3Dview%26id%3D1IQkV5an89ZHvaBTyQ3jZlvSf3vpOja0l" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W-inXK5f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://drive.google.com/uc%3Fexport%3Dview%26id%3D1IQkV5an89ZHvaBTyQ3jZlvSf3vpOja0l" alt="the first request canceled" width="880" height="108"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
    </item>
  </channel>
</rss>
