{"id":3117,"date":"2020-11-05T08:34:46","date_gmt":"2020-11-05T00:34:46","guid":{"rendered":"http:\/\/www.yuguoxy.com\/geekhome\/?p=3117"},"modified":"2020-11-05T08:34:46","modified_gmt":"2020-11-05T00:34:46","slug":"24%e4%b8%aa%e8%a7%a3%e5%86%b3%e5%ae%9e%e9%99%85%e9%97%ae%e9%a2%98%e7%9a%84es6%e4%bb%a3%e7%a0%81%e6%ae%b5","status":"publish","type":"post","link":"https:\/\/ai.zhousir.top\/?p=3117","title":{"rendered":"24\u4e2a\u89e3\u51b3\u5b9e\u9645\u95ee\u9898\u7684ES6\u4ee3\u7801\u6bb5"},"content":{"rendered":"<p>\u82f1\u6587 | <a href='https:\/\/madza.hashnode.dev\/24-modern-es6-code-snippets-to-solve-practical-js-problems' target='_blank' class='url'>https:\/\/madza.hashnode.dev\/24-modern-es6-code-snippets-to-solve-practical-js-problems<\/a><\/p>\n<p>\u4f5c\u8005 | Madza \u8bd1\u8005 | \u738b\u5f3a \u7b56\u5212 | \u674e\u4fca\u8fb0<\/p>\n<p>\u8fd9\u7bc7\u6587\u7ae0\u57fa\u4e8e\u5b9e\u9645\u4f7f\u7528\u573a\u666f\u603b\u7ed3\u4e86 24 \u4e2a ES6 \u4ee3\u7801\u6bb5\uff0c\u53ef\u7528\u6765\u89e3\u51b3\u9879\u76ee\u4e2d\u53ef\u80fd\u9047\u5230\u7684\u4e00\u7cfb\u5217\u95ee\u9898\u3002<\/p>\n<p><strong>1\u3001\u5982\u4f55\u9690\u85cf\u6240\u6709\u6307\u5b9a\u5143\u7d20\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'>const hide = (...el) =&gt; [...el].forEach(e =&gt; (e.style.display = &#39;none&#39;));      \r\n\/\/ Example      hide(document.querySelectorAll(&#39;img&#39;)); \/\/ \u9690\u85cf\u9875\u9762\u4e0a\u7684\u6240\u6709  \u5143\u7d20\r\n<\/code><\/pre>\n<p><strong>2\u3001 \u5982\u4f55\u786e\u8ba4\u5143\u7d20\u662f\u5426\u5177\u6709\u6307\u5b9a\u7684\u7c7b\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'>const hasClass = (el, className) =&gt; el.classList.contains(className);      \r\n\/\/ Example      hasClass(document.querySelector(&#39;p.special&#39;), &#39;special&#39;); \/\/ true\r\n<\/code><\/pre>\n<p><strong>3\u3001 \u5982\u4f55\u5207\u6362\u5143\u7d20\u7684\u7c7b\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'> const toggleClass = (el, className) =&gt; el.classList.toggle(className);      \r\n\/\/ Example      \r\n\/\/toggleClass(document.querySelector(&#39;p.special&#39;), &#39;special&#39;);       \/\/ \u8be5\u6bb5\u4e0d\u518d\u6709 &#39;special&#39; \u7c7b\r\n<\/code><\/pre>\n<p><strong>4\u3001\u5982\u4f55\u83b7\u53d6\u5f53\u524d\u9875\u9762\u7684\u6eda\u52a8\u4f4d\u7f6e\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'> const getScrollPosition = (el = window) =&gt; ({       \r\n     x: el.pageXOffset !== undefined ? el.pageXOffset : el.scrollLeft, y: el.pageYOffset !== undefined ? el.pageYOffset : el.scrollTop  \r\n });      \r\n\/\/ Example      getScrollPosition(); \/\/ {x: 0, y: 200}\r\n<\/code><\/pre>\n<p><strong>5\u3001\u5982\u4f55\u5e73\u6ed1\u6eda\u52a8\u5230\u9875\u9762\u9876\u90e8\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'>const scrollToTop = () =&gt; {        \r\n\tconst c = document.documentElement.scrollTop || document.body.scrollTop;        \r\n    if (c &gt; 0) {          \r\n        window.requestAnimationFrame(scrollToTop);          \r\n        window.scrollTo(0, c - c \/ 8);        \r\n    }      \r\n};      \r\n\/\/ Example      scrollToTop();\r\n<\/code><\/pre>\n<p><strong>6\u3001 \u5982\u4f55\u786e\u8ba4\u7236\u5143\u7d20\u662f\u5426\u5305\u542b\u5b50\u5143\u7d20\uff1f<\/strong><\/p>\n<pre><code class='language-javascript' lang='javascript'>const elementContains = \r\n      (parent, child) =&gt; parent !== child &amp;&amp; parent.contains(child);      \r\n\/\/ Examples      elementContains(document.querySelector(&#39;head&#39;), document.querySelector(&#39;title&#39;));       \/\/ true      elementContains(document.querySelector(&#39;body&#39;), document.querySelector(&#39;body&#39;)); \/\/ false\r\n<\/code><\/pre>\n<p><strong>7\u3001\u5982\u4f55\u786e\u8ba4\u6307\u5b9a\u5143\u7d20\u662f\u5426\u5728\u89c6\u53e3\u53ef\u89c1\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'>const elementIsVisibleInViewport = (el, partiallyVisible = false) =&gt; { \r\n    const { top, left, bottom, right } = el.getBoundingClientRect(); \r\n    const { innerHeight, innerWidth } = window; \r\n    return partiallyVisible ? ((top &gt; 0 &amp;&amp; top &lt; innerHeight) || (bottom &gt; 0 &amp;&amp; bottom &lt; innerHeight)) &amp;&amp; ((left &gt; 0 &amp;&amp; left &lt; innerWidth) || (right &gt; 0 &amp;&amp; right &lt; innerWidth)) : top &gt;= 0 &amp;&amp; left &gt;= 0 &amp;&amp; bottom &lt;= innerHeight &amp;&amp; right &lt;= innerWidth; \r\n};      \r\n\/\/ Examples      elementIsVisibleInViewport(el); \/\/ (\u4e0d\u5b8c\u5168\u53ef\u89c1)      elementIsVisibleInViewport(el, true); \/\/ (\u90e8\u5206\u53ef\u89c1)\r\n<\/code><\/pre>\n<p><strong>8\u3001\u5982\u4f55\u83b7\u53d6\u4e00\u4e2a\u5143\u7d20\u5185\u7684\u6240\u6709\u56fe\u50cf\uff1f<\/strong><\/p>\n<pre><code class='language-javascript' lang='javascript'> const getImages = (el, includeDuplicates = false) =&gt; {        const images = [...el.getElementsByTagName(&#39;img&#39;)].map(img =&gt; img.getAttribute(&#39;hide&#39;));        return includeDuplicates ? images : [...new Set(images)];      };      \/\/ Examples      getImages(document, true); \/\/ [&#39;image1.jpg&#39;, &#39;image2.png&#39;, &#39;image1.png&#39;, &#39;...&#39;]      getImages(document, false); \/\/ [&#39;image1.jpg&#39;, &#39;image2.png&#39;, &#39;...&#39;]\r\n<\/code><\/pre>\n<p><strong>9\u3001\u5982\u4f55\u5206\u8fa8\u8bbe\u5907\u662f\u79fb\u52a8\u8bbe\u5907\u8fd8\u662f\u684c\u9762\u8bbe\u5907\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'>const detectDeviceType = () =&gt;        \/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini\/i.test(navigator.userAgent)          ? &#39;Mobile&#39;          : &#39;Desktop&#39;;      \/\/ Example      detectDeviceType(); \/\/ &quot;Mobile&quot; or &quot;Desktop&quot;\r\n<\/code><\/pre>\n<p><strong>10\u3001 \u5982\u4f55\u83b7\u53d6\u5f53\u524d URL\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'>const currentURL = () =&gt; window.location.href;      \/\/ Example      currentURL(); \/\/ &#39;https:\/\/google.com&#39;\r\n<\/code><\/pre>\n<p><strong>11\u3001 \u5982\u4f55\u521b\u5efa\u4e00\u4e2a\u5305\u542b\u5f53\u524d URL \u53c2\u6570\u7684\u5bf9\u8c61\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'>const getURLParameters = url =&gt;        (url.match(\/([^?=&amp;]+)(=([^&amp;]*))\/g) || []).reduce(          (a, v) =&gt; ((a[v.slice(0, v.indexOf(&#39;=&#39;))] = v.slice(v.indexOf(&#39;=&#39;) + 1)), a),          {}        );      \r\n\/\/ Examples      getURLParameters(&#39;http:\/\/url.com\/page?n=Adam&amp;s;=Smith&#39;); \/\/ {n: &#39;Adam&#39;, s: &#39;Smith&#39;}      getURLParameters(&#39;google.com&#39;); \/\/ {}\r\n<\/code><\/pre>\n<p><strong>12\u3001\u5982\u4f55\u5c06\u4e00\u7ec4\u8868\u5355\u5143\u7d20\u7f16\u7801\u4e3a\u4e00\u4e2a\u5bf9\u8c61\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'>const formToObject = form =&gt;        Array.from(new FormData(form)).reduce(          (acc, [key, value]) =&gt; ({            ...acc,            [key]: value          }),          {}        );      \r\n\/\/ Example      formToObject(document.querySelector(&#39;#form&#39;)); \/\/ { email: &#39;test@email.com&#39;, name: &#39;Test Name&#39; }\r\n<\/code><\/pre>\n<p><strong>13\u3001 \u5982\u4f55\u4ece\u5bf9\u8c61\u4e2d\u68c0\u7d22\u7ed9\u5b9a\u9009\u62e9\u5668\u6307\u793a\u7684\u4e00\u7ec4\u5c5e\u6027\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'>const get = (from, ...selectors) =&gt;        [...selectors].map(s =&gt;          s            .replace(\/\\[([^\\[\\]]*)\\]\/g, &#39;.$1.&#39;)            .split(&#39;.&#39;)            .filter(t =&gt; t !== &#39;&#39;)            .reduce((prev, cur) =&gt; prev &amp;&amp; prev[cur], from)        );      \r\nconst obj = { selector: { to: { val: &#39;val to select&#39; } }, target: [1, 2, { a: &#39;test&#39; }] };      \/\/ Example      get(obj, &#39;selector.to.val&#39;, &#39;target[0]&#39;, &#39;target[2].a&#39;); \/\/ [&#39;val to select&#39;, 1, &#39;test&#39;]\r\n<\/code><\/pre>\n<p><strong>14\u3001 \u5982\u4f55\u5728\u7b49\u5f85\u4e00\u5b9a\u65f6\u95f4\u540e\u8c03\u7528\u63d0\u4f9b\u7684\u51fd\u6570\uff08\u5355\u4f4d\u6beb\u79d2\uff09\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'> const delay = (fn, wait, ...args) =&gt; setTimeout(fn, wait, ...args);      \r\ndelay(        function(text) {          console.log(text);        },        1000,        &#39;later&#39;      );       \r\n\/\/ \u4e00\u79d2\u540e\u8bb0\u5f55 &#39;later&#39; \u3002\r\n<\/code><\/pre>\n<p><strong>15\u3001\u5982\u4f55\u5728\u7ed9\u5b9a\u5143\u7d20\u4e0a\u89e6\u53d1\u7279\u5b9a\u4e8b\u4ef6\uff0c\u4e14\u53ef\u9009\u4f20\u9012\u81ea\u5b9a\u4e49\u6570\u636e\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'> const triggerEvent = (el, eventType, detail) =&gt;  el.dispatchEvent(new        CustomEvent(eventType, { detail }));      \r\n\/\/ Examples      triggerEvent(document.getElementById(&#39;myId&#39;), &#39;click&#39;);      triggerEvent(document.getElementById(&#39;myId&#39;), &#39;click&#39;, { username: &#39;bob&#39; });\r\n<\/code><\/pre>\n<p><strong>16\u3001 \u5982\u4f55\u79fb\u9664\u4e00\u4e2a\u5143\u7d20\u7684\u4e8b\u4ef6\u4fa6\u542c\u5668\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'> const off = (el, evt, fn, opts = false) =&gt; el.removeEventListener(evt, fn, opts);      const fn = () =&gt; console.log(&#39;!&#39;);      \r\ndocument.body.addEventListener(&#39;click&#39;, fn);      \r\noff(document.body, &#39;click&#39;, fn); \r\n\/\/ no longer logs &#39;!&#39; upon clicking on the page\r\n<\/code><\/pre>\n<p><strong>17\u3001 \u5982\u4f55\u83b7\u5f97\u7ed9\u5b9a\u6beb\u79d2\u6570\u7684\u53ef\u8bfb\u683c\u5f0f\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'>const formatDuration = ms =&gt; {        \r\n    if (ms &lt; 0) ms = -ms;       \r\n     const time = {day: Math.floor(ms \/ 86400000),  hour: Math.floor(ms \/ 3600000) % 24, minute: Math.floor(ms \/ 60000) % 60, second: Math.floor(ms \/ 1000) % 60,  millisecond: Math.floor(ms) % 1000        \r\n     };        \r\n      return Object.entries(time) .filter(val =&gt; val[1] !== 0).map(([key, val]) =&gt; `${val} ${key}${val !== 1 ? &#39;s&#39; : &#39;&#39;}`) .join(&#39;, &#39;);      \r\n};     \r\n\/\/ Examples      formatDuration(1001); \/\/ &#39;1 second, 1 millisecond&#39;      formatDuration(34325055574); \/\/ &#39;397 days, 6 hours, 44 minutes, 15 seconds, 574 milliseconds&#39;\r\n<\/code><\/pre>\n<p><strong>18\u3001 \u5982\u4f55\u83b7\u53d6\u4e24\u4e2a\u65e5\u671f\u4e4b\u95f4\u7684\u5929\u6570\u95f4\u9694\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'> const getDaysDiffBetweenDates = (dateInitial, dateFinal) =&gt;        (dateFinal - dateInitial) \/ (1000 * 3600 * 24);      \/\/ Example      getDaysDiffBetweenDates(new Date(&#39;2017-12-13&#39;), new Date(&#39;2017-12-22&#39;)); \/\/ 9\r\n<\/code><\/pre>\n<p><strong>19\u3001 \u5982\u4f55\u5bf9\u4f20\u9012\u7684 URL \u8fdb\u884c GET \u8bf7\u6c42\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'> const httpGet = (url, callback, err = console.error) =&gt; {        const request = new XMLHttpRequest();        request.open(&#39;GET&#39;, url, true);        request.onload = () =&gt; callback(request.responseText);        request.onerror = () =&gt; err(request);        request.send();      };      httpGet(        &#39;https:\/\/jsonplaceholder.typicode.com\/posts\/1&#39;,        console.log      );       \/\/ Logs: {&quot;userId&quot;: 1, &quot;id&quot;: 1, &quot;title&quot;: &quot;sample title&quot;, &quot;body&quot;: &quot;my text&quot;}\r\n<\/code><\/pre>\n<p><strong>20\u3001 \u5982\u4f55\u5bf9\u4f20\u9012\u7684 URL \u8fdb\u884c POST \u8bf7\u6c42\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'>const httpPost = (url, data, callback, err = console.error) =&gt; {        \r\n    const request = new XMLHttpRequest();        \r\n    request.open(&#39;POST&#39;, url, true);        \r\n    request.setRequestHeader(&#39;Content-type&#39;, &#39;application\/json; charset=utf-8&#39;);             request.onload = () =&gt; callback(request.responseText);        \r\n    request.onerror = () =&gt; err(request);      \r\n    request.send(data);      \r\n};      \r\nconst newPost = {        \r\n    userId: 1,        id: 1337,        title: &#39;Foo&#39;,        body: &#39;bar bar bar&#39;      \r\n};      \r\nconst data = JSON.stringify(newPost);      \r\nhttpPost(        \r\n    &#39;https:\/\/jsonplaceholder.typicode.com\/posts&#39;,        \r\n    data,        \r\n    console.log      \r\n);       \r\n\/\/ Logs: {&quot;userId&quot;: 1, &quot;id&quot;: 1337, &quot;title&quot;: &quot;Foo&quot;, &quot;body&quot;: &quot;bar bar bar&quot;}\r\n<\/code><\/pre>\n<p><strong>21\u3001 \u5982\u4f55\u4e3a\u6307\u5b9a\u9009\u62e9\u5668\u521b\u5efa\u5177\u6709\u6307\u5b9a\u8303\u56f4\u3001\u6b65\u957f\u548c\u6301\u7eed\u65f6\u95f4\u7684\u8ba1\u65f6\u5668\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'>const counter = (selector, start, end, step = 1, duration = 2000) =&gt; {        \r\n    let current = start,          _step = (end - start) * step &lt; 0 ? -step : step,          timer = setInterval(() =&gt; {            \r\n        current += _step;            \r\n        document.querySelector(selector).innerHTML = current;            \r\n        if (current &gt;= end) document.querySelector(selector).innerHTML = end;            if (current &gt;= end) clearInterval(timer);          \r\n    }, Math.abs(Math.floor(duration \/ (end - start))));       \r\n    return timer;      \r\n};      \r\n\/\/ Example      counter(&#39;#my-id&#39;, 1, 1000, 5, 2000); \/\/ \u4e3a id=&quot;my-id&quot; \u7684\u5143\u7d20\u521b\u5efa\u4e00\u4e2a\u4e24\u79d2\u7684\u8ba1\u65f6\u5668\r\n<\/code><\/pre>\n<p><strong>22\u3001 \u5982\u4f55\u5c06\u4e00\u4e2a\u5b57\u7b26\u4e32\u590d\u5236\u5230\u526a\u8d34\u677f\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'>const copyToClipboard = str =&gt; {        \r\n    const el = document.createElement(&#39;textarea&#39;);        \r\n    el.value = str;        \r\n    el.setAttribute(&#39;readonly&#39;, &#39;&#39;);        \r\n    el.style.position = &#39;absolute&#39;;        \r\n    el.style.left = &#39;-9999px&#39;;        \r\n    document.body.appendChild(el);        \r\n    const selected =document.getSelection().rangeCount &gt; 0 ? document.getSelection().getRangeAt(0) : false;        \r\n    el.select();        \r\n    document.execCommand(&#39;copy&#39;);        \r\n    document.body.removeChild(el);        \r\n    if (selected) {          \r\n        document.getSelection().removeAllRanges();          document.getSelection().addRange(selected);       \r\n    }      \r\n};     \r\n\/\/ Example      copyToClipboard(&#39;Lorem ipsum&#39;); \/\/ &#39;Lorem ipsum&#39; copied to clipboard.\r\n<\/code><\/pre>\n<p><strong>23\u3001 \u5982\u4f55\u786e\u5b9a\u9875\u9762\u7684\u6d4f\u89c8\u5668\u9009\u9879\u5361\u662f\u5426\u5904\u4e8e\u524d\u53f0\u6d3b\u8dc3\u72b6\u6001\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'>const isBrowserTabFocused = () =&gt; !document.hidden;      \/\/ Example      isBrowserTabFocused(); \/\/ true\r\n<\/code><\/pre>\n<p><strong>24\u3001\u5982\u679c\u4e00\u4e2a\u76ee\u5f55\u4e0d\u5b58\u5728\uff0c\u5982\u4f55\u521b\u5efa\u5b83\uff1f<\/strong><\/p>\n<p>&nbsp;<\/p>\n<pre><code class='language-javascript' lang='javascript'> const fs = require(&#39;fs&#39;);      \r\nconst createDirIfNotExists = dir =&gt; (!fs.existsSync(dir) ? fs.mkdirSync(dir) : undefined);     \r\n\/\/ Example      createDirIfNotExists(&#39;test&#39;); \/\/ creates the directory &#39;test&#39;, if it doesn&#39;t exist\r\n<\/code><\/pre>\n<p>\u672c\u6587\u5b8c~<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u82f1\u6587 | https:\/\/madza.hashnode.dev\/24-modern-es6-code-snip [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[115],"tags":[],"_links":{"self":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/3117"}],"collection":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3117"}],"version-history":[{"count":2,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/3117\/revisions"}],"predecessor-version":[{"id":3119,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/3117\/revisions\/3119"}],"wp:attachment":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3117"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}