{"id":1353,"date":"2024-06-02T22:21:25","date_gmt":"2024-06-02T22:21:25","guid":{"rendered":""},"modified":"2024-06-05T03:08:19","modified_gmt":"2024-06-04T19:08:19","slug":"es6-%e5%ae%8c%e5%85%a8%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c","status":"publish","type":"post","link":"https:\/\/www.lccc.top\/?p=1353","title":{"rendered":"ES6 \u5b8c\u5168\u4f7f\u7528\u624b\u518c"},"content":{"rendered":"<td class=\"d-block comment-body markdown-body  js-comment-body\">\n<h2 dir=\"auto\">\u524d\u8a00<\/h2>\n<ol dir=\"auto\">\n<li>\u8fd9\u91cc\u7684 &#8220;ES6&#8221; \u6cdb\u6307 ES5 \u4e4b\u540e\u7684\u65b0\u8bed\u6cd5<\/li>\n<li>\u8fd9\u91cc\u7684 &#8220;\u5b8c\u5168&#8221; \u662f\u6307\u672c\u6587\u5c3d\u53ef\u80fd\u9f50\u5168<\/li>\n<li>\u8fd9\u91cc\u7684 &#8220;\u4f7f\u7528&#8221; \u662f\u6307\u672c\u6587\u4f1a\u5c55\u793a\u5f88\u591a ES6 \u7684\u4f7f\u7528\u573a\u666f<\/li>\n<li>\u8fd9\u91cc\u7684 &#8220;\u624b\u518c&#8221; \u662f\u6307\u4f60\u53ef\u4ee5\u53c2\u7167\u672c\u6587\u5c06\u9879\u76ee\u66f4\u591a\u7684\u91cd\u6784\u4e3a ES6 \u8bed\u6cd5<\/li>\n<\/ol>\n<p dir=\"auto\">\u6b64\u5916\u8fd8\u8981\u6ce8\u610f\u8fd9\u91cc\u4e0d\u4e00\u5b9a\u5c31\u662f\u6b63\u5f0f\u8fdb\u5165\u89c4\u8303\u7684\u8bed\u6cd5\u3002<\/p>\n<h2 dir=\"auto\">1. let \u548c const<\/h2>\n<p dir=\"auto\">\u5728\u6211\u4eec\u5f00\u53d1\u7684\u65f6\u5019\uff0c\u53ef\u80fd\u8ba4\u4e3a\u5e94\u8be5\u9ed8\u8ba4\u4f7f\u7528 let \u800c\u4e0d\u662f var\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5bf9\u4e8e\u9700\u8981\u5199\u4fdd\u62a4\u7684\u53d8\u91cf\u8981\u4f7f\u7528 const\u3002<\/p>\n<p dir=\"auto\">\u7136\u800c\u53e6\u4e00\u79cd\u505a\u6cd5\u65e5\u76ca\u666e\u53ca\uff1a\u9ed8\u8ba4\u4f7f\u7528 const\uff0c\u53ea\u6709\u5f53\u786e\u5b9e\u9700\u8981\u6539\u53d8\u53d8\u91cf\u7684\u503c\u7684\u65f6\u5019\u624d\u4f7f\u7528 let\u3002\u8fd9\u662f\u56e0\u4e3a\u5927\u90e8\u5206\u7684\u53d8\u91cf\u7684\u503c\u5728\u521d\u59cb\u5316\u540e\u4e0d\u5e94\u518d\u6539\u53d8\uff0c\u800c\u9884\u6599\u4e4b\u5916\u7684\u53d8\u91cf\u7684\u4fee\u6539\u662f\u5f88\u591a bug \u7684\u6e90\u5934\u3002<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 1-1\n\n\/\/ bad\nvar foo = 'bar';\n\n\/\/ good\nlet foo = 'bar';\n\n\/\/ better\nconst foo = 'bar';\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 1-1<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">foo<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'bar'<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">let<\/span> <span class=\"pl-s1\">foo<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'bar'<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ better<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">foo<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'bar'<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">2. \u6a21\u677f\u5b57\u7b26\u4e32<\/h2>\n<h3 dir=\"auto\">1. \u6a21\u677f\u5b57\u7b26\u4e32<\/h3>\n<p dir=\"auto\">\u9700\u8981\u62fc\u63a5\u5b57\u7b26\u4e32\u7684\u65f6\u5019\u5c3d\u91cf\u6539\u6210\u4f7f\u7528\u6a21\u677f\u5b57\u7b26\u4e32:<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 2-1\n\n\/\/ bad\nconst foo = 'this is a' + example;\n\n\/\/ good\nconst foo = `this is a ${example}`;\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 2-1<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">foo<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'this is a'<\/span> <span class=\"pl-c1\">+<\/span> <span class=\"pl-s1\">example<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">foo<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">`this is a <span class=\"pl-s1\"><span class=\"pl-kos\">${<\/span><span class=\"pl-s1\">example<\/span><span class=\"pl-kos\">}<\/span><\/span>`<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">2. \u6807\u7b7e\u6a21\u677f<\/h3>\n<p dir=\"auto\">\u53ef\u4ee5\u501f\u52a9\u6807\u7b7e\u6a21\u677f\u4f18\u5316\u4e66\u5199\u65b9\u5f0f:<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 2-2\n\nlet url = oneLine `\n    www.taobao.com\/example\/index.html\n    ?foo=${foo}\n    &amp;bar=${bar}\n`;\n\nconsole.log(url); \/\/ www.taobao.com\/example\/index.html?foo=foo&amp;bar=bar\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 2-2<\/span>\n\n<span class=\"pl-k\">let<\/span> <span class=\"pl-s1\">url<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">oneLine<\/span> <span class=\"pl-s\">`<\/span>\n<span class=\"pl-s\">    www.taobao.com\/example\/index.html<\/span>\n<span class=\"pl-s\">    ?foo=<span class=\"pl-s1\"><span class=\"pl-kos\">${<\/span><span class=\"pl-s1\">foo<\/span><span class=\"pl-kos\">}<\/span><\/span><\/span>\n<span class=\"pl-s\">    &amp;bar=<span class=\"pl-s1\"><span class=\"pl-kos\">${<\/span><span class=\"pl-s1\">bar<\/span><span class=\"pl-kos\">}<\/span><\/span><\/span>\n<span class=\"pl-s\">`<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">url<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ www.taobao.com\/example\/index.html?foo=foo&amp;bar=bar<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">oneLine \u7684\u6e90\u7801\u53ef\u4ee5\u53c2\u8003 <a href=\"https:\/\/github.com\/mqyqingfeng\/Blog\/issues\/84\" data-hovercard-type=\"issue\" data-hovercard-url=\"\/mqyqingfeng\/Blog\/issues\/84\/hovercard\">\u300aES6 \u7cfb\u5217\u4e4b\u6a21\u677f\u5b57\u7b26\u4e32\u300b<\/a><\/p>\n<h2 dir=\"auto\">3. \u7bad\u5934\u51fd\u6570<\/h2>\n<p dir=\"auto\">\u4f18\u5148\u4f7f\u7528\u7bad\u5934\u51fd\u6570\uff0c\u4e0d\u8fc7\u4ee5\u4e0b\u51e0\u79cd\u60c5\u51b5\u907f\u514d\u4f7f\u7528\uff1a<\/p>\n<h3 dir=\"auto\">1. \u4f7f\u7528\u7bad\u5934\u51fd\u6570\u5b9a\u4e49\u5bf9\u8c61\u7684\u65b9\u6cd5<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 3-1\n\n\/\/ bad\nlet foo = {\n  value: 1,\n  getValue: () =&gt; console.log(this.value)\n}\n\nfoo.getValue();  \/\/ undefined\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 3-1<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-k\">let<\/span> <span class=\"pl-s1\">foo<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-c1\">value<\/span>: <span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">,<\/span>\n  <span class=\"pl-en\">getValue<\/span>: <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">value<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-s1\">foo<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">getValue<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>  <span class=\"pl-c\">\/\/ undefined<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">2. \u5b9a\u4e49\u539f\u578b\u65b9\u6cd5<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 3-2\n\n\/\/ bad\nfunction Foo() {\n  this.value = 1\n}\n\nFoo.prototype.getValue = () =&gt; console.log(this.value)\n\nlet foo = new Foo()\nfoo.getValue();  \/\/ undefined\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 3-2<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-v\">Foo<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">value<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">1<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-v\">Foo<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">prototype<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">getValue<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">value<\/span><span class=\"pl-kos\">)<\/span>\n\n<span class=\"pl-k\">let<\/span> <span class=\"pl-s1\">foo<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-v\">Foo<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-s1\">foo<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">getValue<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>  <span class=\"pl-c\">\/\/ undefined<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">3. \u4f5c\u4e3a\u4e8b\u4ef6\u7684\u56de\u8c03\u51fd\u6570<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 3-3\n\n\/\/ bad\nconst button = document.getElementById('myButton');\nbutton.addEventListener('click', () =&gt; {\n    console.log(this === window); \/\/ =&gt; true\n    this.innerHTML = 'Clicked button';\n});\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 3-3<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">button<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-smi\">document<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">getElementById<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'myButton'<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-s1\">button<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">addEventListener<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'click'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">this<\/span> <span class=\"pl-c1\">===<\/span> <span class=\"pl-smi\">window<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ =&gt; true<\/span>\n    <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">innerHTML<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'Clicked button'<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">4. Symbol<\/h2>\n<h3 dir=\"auto\">1. \u552f\u4e00\u503c<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content='\/\/ \u4f8b\u5b50 4-1\n\n\n\/\/ bad\n\/\/ 1. \u521b\u5efa\u7684\u5c5e\u6027\u4f1a\u88ab for-in \u6216 Object.keys() \u679a\u4e3e\u51fa\u6765\n\/\/ 2. \u4e00\u4e9b\u5e93\u53ef\u80fd\u5728\u5c06\u6765\u4f1a\u4f7f\u7528\u540c\u6837\u7684\u65b9\u5f0f\uff0c\u8fd9\u4f1a\u4e0e\u4f60\u7684\u4ee3\u7801\u53d1\u751f\u51b2\u7a81\nif (element.isMoving) {\n  smoothAnimations(element);\n}\nelement.isMoving = true;\n\n\/\/ good\nif (element.__$jorendorff_animation_library$PLEASE_DO_NOT_USE_THIS_PROPERTY$isMoving__) {\n  smoothAnimations(element);\n}\nelement.__$jorendorff_animation_library$PLEASE_DO_NOT_USE_THIS_PROPERTY$isMoving__ = true;\n\n\/\/ better\nvar isMoving = Symbol(\"isMoving\");\n\n...\n\nif (element[isMoving]) {\n  smoothAnimations(element);\n}\nelement[isMoving] = true;'><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 4-1<\/span>\n\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-c\">\/\/ 1. \u521b\u5efa\u7684\u5c5e\u6027\u4f1a\u88ab for-in \u6216 Object.keys() \u679a\u4e3e\u51fa\u6765<\/span>\n<span class=\"pl-c\">\/\/ 2. \u4e00\u4e9b\u5e93\u53ef\u80fd\u5728\u5c06\u6765\u4f1a\u4f7f\u7528\u540c\u6837\u7684\u65b9\u5f0f\uff0c\u8fd9\u4f1a\u4e0e\u4f60\u7684\u4ee3\u7801\u53d1\u751f\u51b2\u7a81<\/span>\n<span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">element<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">isMoving<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-en\">smoothAnimations<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">element<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n<span class=\"pl-s1\">element<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">isMoving<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">true<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">element<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">__$jorendorff_animation_library$PLEASE_DO_NOT_USE_THIS_PROPERTY$isMoving__<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-en\">smoothAnimations<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">element<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n<span class=\"pl-s1\">element<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">__$jorendorff_animation_library$PLEASE_DO_NOT_USE_THIS_PROPERTY$isMoving__<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">true<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ better<\/span>\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">isMoving<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-v\">Symbol<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">\"isMoving\"<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n...\n\n<span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">element<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">isMoving<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-en\">smoothAnimations<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">element<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n<span class=\"pl-s1\">element<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">isMoving<\/span><span class=\"pl-kos\">]<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">true<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">2. \u9b54\u672f\u5b57\u7b26\u4e32<\/h3>\n<p dir=\"auto\">\u9b54\u672f\u5b57\u7b26\u4e32\u6307\u7684\u662f\u5728\u4ee3\u7801\u4e4b\u4e2d\u591a\u6b21\u51fa\u73b0\u3001\u4e0e\u4ee3\u7801\u5f62\u6210\u5f3a\u8026\u5408\u7684\u67d0\u4e00\u4e2a\u5177\u4f53\u7684\u5b57\u7b26\u4e32\u6216\u8005\u6570\u503c\u3002<\/p>\n<p dir=\"auto\">\u9b54\u672f\u5b57\u7b26\u4e32\u4e0d\u5229\u4e8e\u4fee\u6539\u548c\u7ef4\u62a4\uff0c\u98ce\u683c\u826f\u597d\u7684\u4ee3\u7801\uff0c\u5e94\u8be5\u5c3d\u91cf\u6d88\u9664\u9b54\u672f\u5b57\u7b26\u4e32\uff0c\u6539\u7531\u542b\u4e49\u6e05\u6670\u7684\u53d8\u91cf\u4ee3\u66ff\u3002<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 4-1\n\n\/\/ bad\nconst TYPE_AUDIO = 'AUDIO'\nconst TYPE_VIDEO = 'VIDEO'\nconst TYPE_IMAGE = 'IMAGE'\n\n\/\/ good\nconst TYPE_AUDIO = Symbol()\nconst TYPE_VIDEO = Symbol()\nconst TYPE_IMAGE = Symbol()\n\nfunction handleFileResource(resource) {\n  switch(resource.type) {\n    case TYPE_AUDIO:\n      playAudio(resource)\n      break\n    case TYPE_VIDEO:\n      playVideo(resource)\n      break\n    case TYPE_IMAGE:\n      previewImage(resource)\n      break\n    default:\n      throw new Error('Unknown type of resource')\n  }\n}\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 4-1<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-c1\">TYPE_AUDIO<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'AUDIO'<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-c1\">TYPE_VIDEO<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'VIDEO'<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-c1\">TYPE_IMAGE<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'IMAGE'<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-c1\">TYPE_AUDIO<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-v\">Symbol<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-c1\">TYPE_VIDEO<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-v\">Symbol<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-c1\">TYPE_IMAGE<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-v\">Symbol<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span>\n\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">handleFileResource<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">resource<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">switch<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">resource<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">type<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">case<\/span> <span class=\"pl-c1\">TYPE_AUDIO<\/span>:\n      <span class=\"pl-en\">playAudio<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">resource<\/span><span class=\"pl-kos\">)<\/span>\n      <span class=\"pl-k\">break<\/span>\n    <span class=\"pl-k\">case<\/span> <span class=\"pl-c1\">TYPE_VIDEO<\/span>:\n      <span class=\"pl-en\">playVideo<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">resource<\/span><span class=\"pl-kos\">)<\/span>\n      <span class=\"pl-k\">break<\/span>\n    <span class=\"pl-k\">case<\/span> <span class=\"pl-c1\">TYPE_IMAGE<\/span>:\n      <span class=\"pl-en\">previewImage<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">resource<\/span><span class=\"pl-kos\">)<\/span>\n      <span class=\"pl-k\">break<\/span>\n    <span class=\"pl-k\">default<\/span>:\n      <span class=\"pl-k\">throw<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-v\">Error<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'Unknown type of resource'<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">3. \u79c1\u6709\u53d8\u91cf<\/h3>\n<p dir=\"auto\">Symbol \u4e5f\u53ef\u4ee5\u7528\u4e8e\u79c1\u6709\u53d8\u91cf\u7684\u5b9e\u73b0\u3002<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 4-3\n\nconst Example = (function() {\n    var _private = Symbol('private');\n\n    class Example {\n        constructor() {\n          this[_private] = 'private';\n        }\n        getName() {\n          return this[_private];\n        }\n    }\n\n    return Example;\n})();\n\nvar ex = new Example();\n\nconsole.log(ex.getName()); \/\/ private\nconsole.log(ex.name); \/\/ undefined\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 4-3<\/span>\n\n<span class=\"pl-k\">const<\/span> <span class=\"pl-v\">Example<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">_private<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-v\">Symbol<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'private'<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n    <span class=\"pl-k\">class<\/span> <span class=\"pl-v\">Example<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-en\">constructor<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n          <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">_private<\/span><span class=\"pl-kos\">]<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'private'<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-kos\">}<\/span>\n        <span class=\"pl-en\">getName<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n          <span class=\"pl-k\">return<\/span> <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">_private<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n        <span class=\"pl-kos\">}<\/span>\n    <span class=\"pl-kos\">}<\/span>\n\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-v\">Example<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">ex<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-v\">Example<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">ex<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">getName<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ private<\/span>\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">ex<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">name<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ undefined<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">5. Set \u548c Map<\/h2>\n<h3 dir=\"auto\">1. \u6570\u7ec4\u53bb\u91cd<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 5-1\n\n[...new Set(array)]\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 5-1<\/span>\n\n<span class=\"pl-kos\">[<\/span>...<span class=\"pl-k\">new<\/span> <span class=\"pl-v\">Set<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">array<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">]<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">2. \u6761\u4ef6\u8bed\u53e5\u7684\u4f18\u5316<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 5-2\n\/\/ \u6839\u636e\u989c\u8272\u627e\u51fa\u5bf9\u5e94\u7684\u6c34\u679c\n\n\/\/ bad\nfunction test(color) {\n  switch (color) {\n    case 'red':\n      return ['apple', 'strawberry'];\n    case 'yellow':\n      return ['banana', 'pineapple'];\n    case 'purple':\n      return ['grape', 'plum'];\n    default:\n      return [];\n  }\n}\n\ntest('yellow'); \/\/ ['banana', 'pineapple']\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 5-2<\/span>\n<span class=\"pl-c\">\/\/ \u6839\u636e\u989c\u8272\u627e\u51fa\u5bf9\u5e94\u7684\u6c34\u679c<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">test<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">color<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">switch<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">color<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">case<\/span> <span class=\"pl-s\">'red'<\/span>:\n      <span class=\"pl-k\">return<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s\">'apple'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'strawberry'<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-k\">case<\/span> <span class=\"pl-s\">'yellow'<\/span>:\n      <span class=\"pl-k\">return<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s\">'banana'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'pineapple'<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-k\">case<\/span> <span class=\"pl-s\">'purple'<\/span>:\n      <span class=\"pl-k\">return<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s\">'grape'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'plum'<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-k\">default<\/span>:\n      <span class=\"pl-k\">return<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-en\">test<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'yellow'<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ ['banana', 'pineapple']<\/span><\/pre>\n<\/div>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ good\nconst fruitColor = {\n  red: ['apple', 'strawberry'],\n  yellow: ['banana', 'pineapple'],\n  purple: ['grape', 'plum']\n};\n\nfunction test(color) {\n  return fruitColor[color] || [];\n}\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">fruitColor<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-c1\">red<\/span>: <span class=\"pl-kos\">[<\/span><span class=\"pl-s\">'apple'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'strawberry'<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">,<\/span>\n  <span class=\"pl-c1\">yellow<\/span>: <span class=\"pl-kos\">[<\/span><span class=\"pl-s\">'banana'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'pineapple'<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">,<\/span>\n  <span class=\"pl-c1\">purple<\/span>: <span class=\"pl-kos\">[<\/span><span class=\"pl-s\">'grape'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'plum'<\/span><span class=\"pl-kos\">]<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">test<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">color<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">fruitColor<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">color<\/span><span class=\"pl-kos\">]<\/span> <span class=\"pl-c1\">||<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ better\nconst fruitColor = new Map()\n  .set('red', ['apple', 'strawberry'])\n  .set('yellow', ['banana', 'pineapple'])\n  .set('purple', ['grape', 'plum']);\n\nfunction test(color) {\n  return fruitColor.get(color) || [];\n}\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ better<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">fruitColor<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-v\">Map<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-kos\">.<\/span><span class=\"pl-en\">set<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'red'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s\">'apple'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'strawberry'<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-kos\">.<\/span><span class=\"pl-en\">set<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'yellow'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s\">'banana'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'pineapple'<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-kos\">.<\/span><span class=\"pl-en\">set<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'purple'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s\">'grape'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'plum'<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">test<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">color<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">fruitColor<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">get<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">color<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">||<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">6. for of<\/h2>\n<h3 dir=\"auto\">1. \u904d\u5386\u8303\u56f4<\/h3>\n<p dir=\"auto\">for&#8230;of \u5faa\u73af\u53ef\u4ee5\u4f7f\u7528\u7684\u8303\u56f4\u5305\u62ec\uff1a<\/p>\n<ol dir=\"auto\">\n<li>\u6570\u7ec4<\/li>\n<li>Set<\/li>\n<li>Map<\/li>\n<li>\u7c7b\u6570\u7ec4\u5bf9\u8c61\uff0c\u5982 arguments \u5bf9\u8c61\u3001DOM NodeList \u5bf9\u8c61<\/li>\n<li>Generator \u5bf9\u8c61<\/li>\n<li>\u5b57\u7b26\u4e32<\/li>\n<\/ol>\n<h3 dir=\"auto\">2. \u4f18\u52bf<\/h3>\n<p dir=\"auto\">ES2015 \u5f15\u5165\u4e86 for..of \u5faa\u73af\uff0c\u5b83\u7ed3\u5408\u4e86 forEach \u7684\u7b80\u6d01\u6027\u548c\u4e2d\u65ad\u5faa\u73af\u7684\u80fd\u529b\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 6-1\n\nfor (const v of ['a', 'b', 'c']) {\n  console.log(v);\n}\n\/\/ a b c\n\nfor (const [i, v] of ['a', 'b', 'c'].entries()) {\n  console.log(i, v);\n}\n\/\/ 0 &quot;a&quot;\n\/\/ 1 &quot;b&quot;\n\/\/ 2 &quot;c&quot;\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 6-1<\/span>\n\n<span class=\"pl-k\">for<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">v<\/span> <span class=\"pl-k\">of<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s\">'a'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'b'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'c'<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">v<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n<span class=\"pl-c\">\/\/ a b c<\/span>\n\n<span class=\"pl-k\">for<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">const<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">i<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">v<\/span><span class=\"pl-kos\">]<\/span> <span class=\"pl-k\">of<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s\">'a'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'b'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'c'<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">entries<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">i<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">v<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n<span class=\"pl-c\">\/\/ 0 \"a\"<\/span>\n<span class=\"pl-c\">\/\/ 1 \"b\"<\/span>\n<span class=\"pl-c\">\/\/ 2 \"c\"<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">3. \u904d\u5386 Map<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 6-2\n\nlet map = new Map(arr);\n\n\/\/ \u904d\u5386 key \u503c\nfor (let key of map.keys()) {\n  console.log(key);\n}\n\n\/\/ \u904d\u5386 value \u503c\nfor (let value of map.values()) {\n  console.log(value);\n}\n\n\/\/ \u904d\u5386 key \u548c value \u503c(\u4e00)\nfor (let item of map.entries()) {\n  console.log(item[0], item[1]);\n}\n\n\/\/ \u904d\u5386 key \u548c value \u503c(\u4e8c)\nfor (let [key, value] of data) {\n  console.log(key)\n}\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 6-2<\/span>\n\n<span class=\"pl-k\">let<\/span> <span class=\"pl-s1\">map<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-v\">Map<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">arr<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ \u904d\u5386 key \u503c<\/span>\n<span class=\"pl-k\">for<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">let<\/span> <span class=\"pl-s1\">key<\/span> <span class=\"pl-k\">of<\/span> <span class=\"pl-s1\">map<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">keys<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">key<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ \u904d\u5386 value \u503c<\/span>\n<span class=\"pl-k\">for<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">let<\/span> <span class=\"pl-s1\">value<\/span> <span class=\"pl-k\">of<\/span> <span class=\"pl-s1\">map<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">values<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ \u904d\u5386 key \u548c value \u503c(\u4e00)<\/span>\n<span class=\"pl-k\">for<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">let<\/span> <span class=\"pl-s1\">item<\/span> <span class=\"pl-k\">of<\/span> <span class=\"pl-s1\">map<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">entries<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">item<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-c1\">0<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">item<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ \u904d\u5386 key \u548c value \u503c(\u4e8c)<\/span>\n<span class=\"pl-k\">for<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">let<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">key<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">value<\/span><span class=\"pl-kos\">]<\/span> <span class=\"pl-k\">of<\/span> <span class=\"pl-s1\">data<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">key<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">7. Promise<\/h2>\n<h3 dir=\"auto\">1. \u57fa\u672c\u793a\u4f8b<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 7-1\n\n\/\/ bad\nrequest(url, function(err, res, body) {\n    if (err) handleError(err);\n    fs.writeFile('1.txt', body, function(err) {\n        request(url2, function(err, res, body) {\n            if (err) handleError(err)\n        })\n    })\n});\n\n\/\/ good\nrequest(url)\n.then(function(result) {\n    return writeFileAsynv('1.txt', result)\n})\n.then(function(result) {\n    return request(url2)\n})\n.catch(function(e){\n    handleError(e)\n});\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 7-1<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-en\">request<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">url<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">res<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">body<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-en\">handleError<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-s1\">fs<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">writeFile<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'1.txt'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">body<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-en\">request<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">url2<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">res<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">body<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n            <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-en\">handleError<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span>\n        <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-en\">request<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">url<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">.<\/span><span class=\"pl-en\">then<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">result<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">writeFileAsynv<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'1.txt'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">result<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">.<\/span><span class=\"pl-en\">then<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">result<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">request<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">url2<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">.<\/span><span class=\"pl-en\">catch<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-k\">function<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">e<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-en\">handleError<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">e<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">2. finally<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 7-2\n\nfetch('file.json')\n.then(data =&gt; data.json())\n.catch(error =&gt; console.error(error))\n.finally(() =&gt; console.log('finished'));\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 7-2<\/span>\n\n<span class=\"pl-en\">fetch<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'file.json'<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">.<\/span><span class=\"pl-en\">then<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">data<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-s1\">data<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">json<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">.<\/span><span class=\"pl-en\">catch<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">error<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">error<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">error<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">.<\/span><span class=\"pl-en\">finally<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'finished'<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">8. Async<\/h2>\n<h3 dir=\"auto\">1. \u4ee3\u7801\u66f4\u52a0\u7b80\u6d01<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content='\/\/ \u4f8b\u5b50 8-1\n\n\/\/ good\nfunction fetch() {\n  return (\n    fetchData()\n    .then(() =&gt; {\n      return \"done\"\n    });\n  )\n}\n\n\/\/ better\nasync function fetch() {\n  await fetchData()\n  return \"done\"\n};'><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 8-1<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">fetch<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-kos\">(<\/span>\n    <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span>\n    <span class=\"pl-kos\">.<\/span><span class=\"pl-en\">then<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">{<\/span>\n      <span class=\"pl-k\">return<\/span> <span class=\"pl-s\">\"done\"<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ better<\/span>\n<span class=\"pl-k\">async<\/span> <span class=\"pl-k\">function<\/span> <span class=\"pl-en\">fetch<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">await<\/span> <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-s\">\"done\"<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 8-2\n\n\/\/ good\nfunction fetch() {\n  return fetchData()\n  .then(data =&gt; {\n    if (data.moreData) {\n        return fetchAnotherData(data)\n        .then(moreData =&gt; {\n          return moreData\n        })\n    } else {\n      return data\n    }\n  });\n}\n\n\/\/ better\nasync function fetch() {\n  const data = await fetchData()\n  if (data.moreData) {\n    const moreData = await fetchAnotherData(data);\n    return moreData\n  } else {\n    return data\n  }\n};\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 8-2<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">fetch<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-kos\">.<\/span><span class=\"pl-en\">then<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">data<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">data<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">moreData<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">fetchAnotherData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">data<\/span><span class=\"pl-kos\">)<\/span>\n        <span class=\"pl-kos\">.<\/span><span class=\"pl-en\">then<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">moreData<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">{<\/span>\n          <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">moreData<\/span>\n        <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span>\n    <span class=\"pl-kos\">}<\/span> <span class=\"pl-k\">else<\/span> <span class=\"pl-kos\">{<\/span>\n      <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">data<\/span>\n    <span class=\"pl-kos\">}<\/span>\n  <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ better<\/span>\n<span class=\"pl-k\">async<\/span> <span class=\"pl-k\">function<\/span> <span class=\"pl-en\">fetch<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">data<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">await<\/span> <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">data<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">moreData<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">moreData<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">await<\/span> <span class=\"pl-en\">fetchAnotherData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">data<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">moreData<\/span>\n  <span class=\"pl-kos\">}<\/span> <span class=\"pl-k\">else<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">data<\/span>\n  <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 8-3\n\n\/\/ good\nfunction fetch() {\n  return (\n    fetchData()\n    .then(value1 =&gt; {\n      return fetchMoreData(value1)\n    })\n    .then(value2 =&gt; {\n      return fetchMoreData2(value2)\n    })\n  )\n}\n\n\/\/ better\nasync function fetch() {\n  const value1 = await fetchData()\n  const value2 = await fetchMoreData(value1)\n  return fetchMoreData2(value2)\n};\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 8-3<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">fetch<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-kos\">(<\/span>\n    <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span>\n    <span class=\"pl-kos\">.<\/span><span class=\"pl-en\">then<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value1<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">{<\/span>\n      <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">fetchMoreData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value1<\/span><span class=\"pl-kos\">)<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span>\n    <span class=\"pl-kos\">.<\/span><span class=\"pl-en\">then<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value2<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">{<\/span>\n      <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">fetchMoreData2<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value2<\/span><span class=\"pl-kos\">)<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ better<\/span>\n<span class=\"pl-k\">async<\/span> <span class=\"pl-k\">function<\/span> <span class=\"pl-en\">fetch<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">value1<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">await<\/span> <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">value2<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">await<\/span> <span class=\"pl-en\">fetchMoreData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value1<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-en\">fetchMoreData2<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">value2<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">2. \u9519\u8bef\u5904\u7406<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 8-4\n\n\/\/ good\nfunction fetch() {\n  try {\n    fetchData()\n      .then(result =&gt; {\n        const data = JSON.parse(result)\n      })\n      .catch((err) =&gt; {\n        console.log(err)\n      })\n  } catch (err) {\n    console.log(err)\n  }\n}\n\n\/\/ better\nasync function fetch() {\n  try {\n    const data = JSON.parse(await fetchData())\n  } catch (err) {\n    console.log(err)\n  }\n};\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 8-4<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">fetch<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">try<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span>\n      <span class=\"pl-kos\">.<\/span><span class=\"pl-en\">then<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">result<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">data<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">JSON<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">parse<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">result<\/span><span class=\"pl-kos\">)<\/span>\n      <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span>\n      <span class=\"pl-kos\">.<\/span><span class=\"pl-en\">catch<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span>\n      <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-kos\">}<\/span> <span class=\"pl-k\">catch<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ better<\/span>\n<span class=\"pl-k\">async<\/span> <span class=\"pl-k\">function<\/span> <span class=\"pl-en\">fetch<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">try<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">data<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">JSON<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">parse<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-k\">await<\/span> <span class=\"pl-en\">fetchData<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-kos\">}<\/span> <span class=\"pl-k\">catch<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">err<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">3. &#8220;async \u5730\u72f1&#8221;<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 8-5\n\n\/\/ bad\n(async () =&gt; {\n  const getList = await getList();\n  const getAnotherList = await getAnotherList();\n})();\n\n\/\/ good\n(async () =&gt; {\n  const listPromise = getList();\n  const anotherListPromise = getAnotherList();\n  await listPromise;\n  await anotherListPromise;\n})();\n\n\/\/ good\n(async () =&gt; {\n  Promise.all([getList(), getAnotherList()]).then(...);\n})();\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 8-5<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-kos\">(<\/span><span class=\"pl-k\">async<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">getList<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">await<\/span> <span class=\"pl-s1\">getList<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">getAnotherList<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">await<\/span> <span class=\"pl-s1\">getAnotherList<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-kos\">(<\/span><span class=\"pl-k\">async<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">listPromise<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">getList<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">anotherListPromise<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">getAnotherList<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-k\">await<\/span> <span class=\"pl-s1\">listPromise<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-k\">await<\/span> <span class=\"pl-s1\">anotherListPromise<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-kos\">(<\/span><span class=\"pl-k\">async<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-v\">Promise<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">all<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-en\">getList<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-en\">getAnotherList<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">then<\/span><span class=\"pl-kos\">(<\/span>...<span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">9. Class<\/h2>\n<p dir=\"auto\">\u6784\u9020\u51fd\u6570\u5c3d\u53ef\u80fd\u4f7f\u7528 Class \u7684\u5f62\u5f0f<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 9-1\n\nclass Foo {\n  static bar () {\n    this.baz();\n  }\n  static baz () {\n    console.log('hello');\n  }\n  baz () {\n    console.log('world');\n  }\n}\n\nFoo.bar(); \/\/ hello\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 9-1<\/span>\n\n<span class=\"pl-k\">class<\/span> <span class=\"pl-v\">Foo<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">static<\/span> <span class=\"pl-en\">bar<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">baz<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span>\n  <span class=\"pl-k\">static<\/span> <span class=\"pl-en\">baz<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'hello'<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span>\n  <span class=\"pl-en\">baz<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'world'<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-v\">Foo<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">bar<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ hello<\/span><\/pre>\n<\/div>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 9-2\n\nclass Shape {\n  constructor(width, height) {\n    this._width = width;\n    this._height = height;\n  }\n  get area() {\n    return this._width * this._height;\n  }\n}\n\nconst square = new Shape(10, 10);\nconsole.log(square.area);    \/\/ 100\nconsole.log(square._width);  \/\/ 10\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 9-2<\/span>\n\n<span class=\"pl-k\">class<\/span> <span class=\"pl-v\">Shape<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-en\">constructor<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">width<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">height<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_width<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">width<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_height<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">height<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span>\n  <span class=\"pl-k\">get<\/span> <span class=\"pl-en\">area<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_width<\/span> <span class=\"pl-c1\">*<\/span> <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_height<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">square<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-v\">Shape<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">10<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">10<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">square<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">area<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>    <span class=\"pl-c\">\/\/ 100<\/span>\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">square<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">_width<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>  <span class=\"pl-c\">\/\/ 10<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">10.Decorator<\/h2>\n<h3 dir=\"auto\">1. log<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 10-1\n\nclass Math {\n  @log\n  add(a, b) {\n    return a + b;\n  }\n}\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 10-1<\/span>\n\n<span class=\"pl-k\">class<\/span> <span class=\"pl-v\">Math<\/span> <span class=\"pl-kos\">{<\/span>\n  @<span class=\"pl-s1\">log<\/span>\n  <span class=\"pl-en\">add<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">a<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">b<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">+<\/span> <span class=\"pl-s1\">b<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">log \u7684\u5b9e\u73b0\u53ef\u4ee5\u53c2\u8003 <a href=\"https:\/\/github.com\/mqyqingfeng\/Blog\/issues\/109\" data-hovercard-type=\"issue\" data-hovercard-url=\"\/mqyqingfeng\/Blog\/issues\/109\/hovercard\">\u300aES6 \u7cfb\u5217\u4e4b\u6211\u4eec\u6765\u804a\u804a\u88c5\u9970\u5668\u300b<\/a><\/p>\n<h3 dir=\"auto\">2. autobind<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 10-2\n\nclass Toggle extends React.Component {\n\n  @autobind\n  handleClick() {\n    console.log(this)\n  }\n\n  render() {\n    return (\n      &lt;button onClick={this.handleClick}&gt;\n        button\n      &lt;\/button&gt;\n    );\n  }\n}\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 10-2<\/span>\n\n<span class=\"pl-k\">class<\/span> <span class=\"pl-v\">Toggle<\/span> <span class=\"pl-k\">extends<\/span> <span class=\"pl-v\">React<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">Component<\/span> <span class=\"pl-kos\">{<\/span>\n\n  @<span class=\"pl-s1\">autobind<\/span>\n  <span class=\"pl-en\">handleClick<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-kos\">}<\/span>\n\n  <span class=\"pl-en\">render<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-kos\">(<\/span>\n      <span class=\"pl-c1\">&lt;<\/span><span class=\"pl-ent\">button<\/span> <span class=\"pl-c1\">onClick<\/span><span class=\"pl-c1\">=<\/span><span class=\"pl-kos\">{<\/span><span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">handleClick<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-c1\">&gt;<\/span>\n        button\n      <span class=\"pl-c1\">&lt;<\/span><span class=\"pl-c1\">\/<\/span><span class=\"pl-ent\">button<\/span><span class=\"pl-c1\">&gt;<\/span>\n    <span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">autobind \u7684\u5b9e\u73b0\u53ef\u4ee5\u53c2\u8003 <a href=\"https:\/\/github.com\/mqyqingfeng\/Blog\/issues\/109\" data-hovercard-type=\"issue\" data-hovercard-url=\"\/mqyqingfeng\/Blog\/issues\/109\/hovercard\">\u300aES6 \u7cfb\u5217\u4e4b\u6211\u4eec\u6765\u804a\u804a\u88c5\u9970\u5668\u300b<\/a><\/p>\n<h3 dir=\"auto\">3. debounce<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 10-3\n\nclass Toggle extends React.Component {\n\n  @debounce(500, true)\n  handleClick() {\n    console.log('toggle')\n  }\n\n  render() {\n    return (\n      &lt;button onClick={this.handleClick}&gt;\n        button\n      &lt;\/button&gt;\n    );\n  }\n}\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 10-3<\/span>\n\n<span class=\"pl-k\">class<\/span> <span class=\"pl-v\">Toggle<\/span> <span class=\"pl-k\">extends<\/span> <span class=\"pl-v\">React<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">Component<\/span> <span class=\"pl-kos\">{<\/span>\n\n  @<span class=\"pl-en\">debounce<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">500<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">true<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-en\">handleClick<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'toggle'<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-kos\">}<\/span>\n\n  <span class=\"pl-en\">render<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-kos\">(<\/span>\n      <span class=\"pl-c1\">&lt;<\/span><span class=\"pl-ent\">button<\/span> <span class=\"pl-c1\">onClick<\/span><span class=\"pl-c1\">=<\/span><span class=\"pl-kos\">{<\/span><span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">handleClick<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-c1\">&gt;<\/span>\n        button\n      <span class=\"pl-c1\">&lt;<\/span><span class=\"pl-c1\">\/<\/span><span class=\"pl-ent\">button<\/span><span class=\"pl-c1\">&gt;<\/span>\n    <span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">debounce \u7684\u5b9e\u73b0\u53ef\u4ee5\u53c2\u8003 <a href=\"https:\/\/github.com\/mqyqingfeng\/Blog\/issues\/109\" data-hovercard-type=\"issue\" data-hovercard-url=\"\/mqyqingfeng\/Blog\/issues\/109\/hovercard\">\u300aES6 \u7cfb\u5217\u4e4b\u6211\u4eec\u6765\u804a\u804a\u88c5\u9970\u5668\u300b<\/a><\/p>\n<h3 dir=\"auto\">4. React \u4e0e Redux<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 10-4\n\n\/\/ good\nclass MyReactComponent extends React.Component {}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(MyReactComponent);\n\n\/\/ better\n@connect(mapStateToProps, mapDispatchToProps)\nexport default class MyReactComponent extends React.Component {};\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 10-4<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">class<\/span> <span class=\"pl-v\">MyReactComponent<\/span> <span class=\"pl-k\">extends<\/span> <span class=\"pl-v\">React<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">Component<\/span> <span class=\"pl-kos\">{<\/span><span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-k\">export<\/span> <span class=\"pl-k\">default<\/span> <span class=\"pl-en\">connect<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">mapStateToProps<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">mapDispatchToProps<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-v\">MyReactComponent<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ better<\/span>\n@<span class=\"pl-en\">connect<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">mapStateToProps<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">mapDispatchToProps<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-k\">export<\/span> <span class=\"pl-k\">default<\/span> <span class=\"pl-k\">class<\/span> <span class=\"pl-v\">MyReactComponent<\/span> <span class=\"pl-k\">extends<\/span> <span class=\"pl-v\">React<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">Component<\/span> <span class=\"pl-kos\">{<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">11. \u51fd\u6570<\/h2>\n<h3 dir=\"auto\">1. \u9ed8\u8ba4\u503c<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 11-1\n\n\/\/ bad\nfunction test(quantity) {\n  const q = quantity || 1;\n}\n\n\/\/ good\nfunction test(quantity = 1) {\n  ...\n}\n\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 11-1<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">test<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">quantity<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">q<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">quantity<\/span> <span class=\"pl-c1\">||<\/span> <span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">test<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">quantity<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  ...\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 11-2\n\ndoSomething({ foo: 'Hello', bar: 'Hey!', baz: 42 });\n\n\/\/ bad\nfunction doSomething(config) {\n  const foo = config.foo !== undefined ? config.foo : 'Hi';\n  const bar = config.bar !== undefined ? config.bar : 'Yo!';\n  const baz = config.baz !== undefined ? config.baz : 13;\n}\n\n\/\/ good\nfunction doSomething({ foo = 'Hi', bar = 'Yo!', baz = 13 }) {\n  ...\n}\n\n\/\/ better\nfunction doSomething({ foo = 'Hi', bar = 'Yo!', baz = 13 } = {}) {\n  ...\n}\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 11-2<\/span>\n\n<span class=\"pl-en\">doSomething<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">{<\/span> <span class=\"pl-c1\">foo<\/span>: <span class=\"pl-s\">'Hello'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">bar<\/span>: <span class=\"pl-s\">'Hey!'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">baz<\/span>: <span class=\"pl-c1\">42<\/span> <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">doSomething<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">config<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">foo<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">config<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">foo<\/span> <span class=\"pl-c1\">!==<\/span> <span class=\"pl-c1\">undefined<\/span> ? <span class=\"pl-s1\">config<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">foo<\/span> : <span class=\"pl-s\">'Hi'<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">bar<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">config<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">bar<\/span> <span class=\"pl-c1\">!==<\/span> <span class=\"pl-c1\">undefined<\/span> ? <span class=\"pl-s1\">config<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">bar<\/span> : <span class=\"pl-s\">'Yo!'<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">baz<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">config<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">baz<\/span> <span class=\"pl-c1\">!==<\/span> <span class=\"pl-c1\">undefined<\/span> ? <span class=\"pl-s1\">config<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">baz<\/span> : <span class=\"pl-c1\">13<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">doSomething<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">{<\/span> foo <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'Hi'<\/span><span class=\"pl-kos\">,<\/span> bar <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'Yo!'<\/span><span class=\"pl-kos\">,<\/span> baz <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">13<\/span> <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  ...\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ better<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">doSomething<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">{<\/span> foo <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'Hi'<\/span><span class=\"pl-kos\">,<\/span> bar <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'Yo!'<\/span><span class=\"pl-kos\">,<\/span> baz <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">13<\/span> <span class=\"pl-kos\">}<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  ...\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 11-3\n\n\/\/ bad\nconst Button = ({className}) =&gt; {\n\tconst classname = className || 'default-size';\n\treturn &lt;span className={classname}&gt;&lt;\/span&gt;\n};\n\n\/\/ good\nconst Button = ({className = 'default-size'}) =&gt; (\n\t&lt;span className={classname}&gt;&lt;\/span&gt;\n);\n\n\/\/ better\nconst Button = ({className}) =&gt;\n\t&lt;span className={className}&gt;&lt;\/span&gt;\n}\n\nButton.defaultProps = {\n\tclassName: 'default-size'\n}\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 11-3<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-v\">Button<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">{<\/span>className<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">{<\/span>\n\t<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">classname<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">className<\/span> <span class=\"pl-c1\">||<\/span> <span class=\"pl-s\">'default-size'<\/span><span class=\"pl-kos\">;<\/span>\n\t<span class=\"pl-k\">return<\/span> <span class=\"pl-c1\">&lt;<\/span><span class=\"pl-ent\">span<\/span> <span class=\"pl-c1\">className<\/span><span class=\"pl-c1\">=<\/span><span class=\"pl-kos\">{<\/span><span class=\"pl-s1\">classname<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-c1\">&gt;<\/span><span class=\"pl-c1\">&lt;<\/span><span class=\"pl-c1\">\/<\/span><span class=\"pl-ent\">span<\/span><span class=\"pl-c1\">&gt;<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-v\">Button<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">{<\/span>className <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'default-size'<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">(<\/span>\n\t<span class=\"pl-c1\">&lt;<\/span><span class=\"pl-ent\">span<\/span> <span class=\"pl-c1\">className<\/span><span class=\"pl-c1\">=<\/span><span class=\"pl-kos\">{<\/span><span class=\"pl-s1\">classname<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-c1\">&gt;<\/span><span class=\"pl-c1\">&lt;<\/span><span class=\"pl-c1\">\/<\/span><span class=\"pl-ent\">span<\/span><span class=\"pl-c1\">&gt;<\/span>\n<span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ better<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-v\">Button<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">{<\/span>className<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span>\n\t<span class=\"pl-c1\">&lt;<\/span><span class=\"pl-ent\">span<\/span> <span class=\"pl-c1\">className<\/span><span class=\"pl-c1\">=<\/span><span class=\"pl-kos\">{<\/span><span class=\"pl-s1\">className<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-c1\">&gt;<\/span><span class=\"pl-c1\">&lt;<\/span><span class=\"pl-c1\">\/<\/span><span class=\"pl-ent\">span<\/span><span class=\"pl-c1\">&gt;<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-v\">Button<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">defaultProps<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span>\n\t<span class=\"pl-c1\">className<\/span>: <span class=\"pl-s\">'default-size'<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 11-4\n\nconst required = () =&gt; {throw new Error('Missing parameter')};\n\nconst add = (a = required(), b = required()) =&gt; a + b;\n\nadd(1, 2) \/\/ 3\nadd(1); \/\/ Error: Missing parameter.\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 11-4<\/span>\n\n<span class=\"pl-k\">const<\/span> <span class=\"pl-en\">required<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">{<\/span><span class=\"pl-k\">throw<\/span> <span class=\"pl-k\">new<\/span> <span class=\"pl-v\">Error<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'Missing parameter'<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">const<\/span> <span class=\"pl-en\">add<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">required<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">b<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">required<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">+<\/span> <span class=\"pl-s1\">b<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-en\">add<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c\">\/\/ 3<\/span>\n<span class=\"pl-en\">add<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ Error: Missing parameter.<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">12. \u62d3\u5c55\u8fd0\u7b97\u7b26<\/h2>\n<h3 dir=\"auto\">1. arguments \u8f6c\u6570\u7ec4<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 12-1\n\n\/\/ bad\nfunction sortNumbers() {\n  return Array.prototype.slice.call(arguments).sort();\n}\n\n\/\/ good\nconst sortNumbers = (...numbers) =&gt; numbers.sort();\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 12-1<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">sortNumbers<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-v\">Array<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">prototype<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">slice<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">call<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">arguments<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">sort<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-en\">sortNumbers<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span>...<span class=\"pl-s1\">numbers<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-s1\">numbers<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">sort<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">2. \u8c03\u7528\u53c2\u6570<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 12-2\n\n\/\/ bad\nMath.max.apply(null, [14, 3, 77])\n\n\/\/ good\nMath.max(...[14, 3, 77])\n\/\/ \u7b49\u540c\u4e8e\nMath.max(14, 3, 77);\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 12-2<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-v\">Math<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">max<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">apply<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">null<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-c1\">14<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">3<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">77<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">)<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-v\">Math<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">max<\/span><span class=\"pl-kos\">(<\/span>...<span class=\"pl-kos\">[<\/span><span class=\"pl-c1\">14<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">3<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">77<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-c\">\/\/ \u7b49\u540c\u4e8e<\/span>\n<span class=\"pl-v\">Math<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">max<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">14<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">3<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">77<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">3. \u6784\u5efa\u5bf9\u8c61<\/h3>\n<p dir=\"auto\">\u5254\u9664\u90e8\u5206\u5c5e\u6027\uff0c\u5c06\u5269\u4e0b\u7684\u5c5e\u6027\u6784\u5efa\u4e00\u4e2a\u65b0\u7684\u5bf9\u8c61<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 12-3\nlet [a, b, ...arr] = [1, 2, 3, 4, 5];\n\nconst { a, b, ...others } = { a: 1, b: 2, c: 3, d: 4, e: 5 };\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 12-3<\/span>\n<span class=\"pl-k\">let<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">a<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">b<\/span><span class=\"pl-kos\">,<\/span> ...<span class=\"pl-s1\">arr<\/span><span class=\"pl-kos\">]<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">3<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">4<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">5<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">const<\/span> <span class=\"pl-kos\">{<\/span> a<span class=\"pl-kos\">,<\/span> b<span class=\"pl-kos\">,<\/span> ...<span class=\"pl-s1\">others<\/span> <span class=\"pl-kos\">}<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span> <span class=\"pl-c1\">a<\/span>: <span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">b<\/span>: <span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">c<\/span>: <span class=\"pl-c1\">3<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">d<\/span>: <span class=\"pl-c1\">4<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">e<\/span>: <span class=\"pl-c1\">5<\/span> <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u6709\u6761\u4ef6\u7684\u6784\u5efa\u5bf9\u8c61<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 12-4\n\n\/\/ bad\nfunction pick(data) {\n  const { id, name, age} = data\n\n  const res = { guid: id }\n\n  if (name) {\n    res.name = name\n  }\n  else if (age) {\n    res.age = age\n  }\n\n  return res\n}\n\n\/\/ good\nfunction pick({id, name, age}) {\n  return {\n    guid: id,\n    ...(name &amp;&amp; {name}),\n    ...(age &amp;&amp; {age})\n  }\n}\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 12-4<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">pick<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">data<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">const<\/span> <span class=\"pl-kos\">{<\/span> id<span class=\"pl-kos\">,<\/span> name<span class=\"pl-kos\">,<\/span> age<span class=\"pl-kos\">}<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">data<\/span>\n\n  <span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">res<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span> <span class=\"pl-c1\">guid<\/span>: <span class=\"pl-s1\">id<\/span> <span class=\"pl-kos\">}<\/span>\n\n  <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">name<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-s1\">res<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">name<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">name<\/span>\n  <span class=\"pl-kos\">}<\/span>\n  <span class=\"pl-k\">else<\/span> <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">age<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-s1\">res<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">age<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">age<\/span>\n  <span class=\"pl-kos\">}<\/span>\n\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">res<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">pick<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">{<\/span>id<span class=\"pl-kos\">,<\/span> name<span class=\"pl-kos\">,<\/span> age<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-c1\">guid<\/span>: <span class=\"pl-s1\">id<\/span><span class=\"pl-kos\">,<\/span>\n    ...<span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">name<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-kos\">{<\/span>name<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">,<\/span>\n    ...<span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">age<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-kos\">{<\/span>age<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u5408\u5e76\u5bf9\u8c61<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 12-5\n\nlet obj1 = { a: 1, b: 2,c: 3 }\nlet obj2 = { b: 4, c: 5, d: 6}\nlet merged = {...obj1, ...obj2};\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 12-5<\/span>\n\n<span class=\"pl-k\">let<\/span> <span class=\"pl-s1\">obj1<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span> <span class=\"pl-c1\">a<\/span>: <span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">b<\/span>: <span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">,<\/span><span class=\"pl-c1\">c<\/span>: <span class=\"pl-c1\">3<\/span> <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-k\">let<\/span> <span class=\"pl-s1\">obj2<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span> <span class=\"pl-c1\">b<\/span>: <span class=\"pl-c1\">4<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">c<\/span>: <span class=\"pl-c1\">5<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">d<\/span>: <span class=\"pl-c1\">6<\/span><span class=\"pl-kos\">}<\/span>\n<span class=\"pl-k\">let<\/span> <span class=\"pl-s1\">merged<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span>...<span class=\"pl-s1\">obj1<\/span><span class=\"pl-kos\">,<\/span> ...<span class=\"pl-s1\">obj2<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">4. React<\/h3>\n<p dir=\"auto\">\u5c06\u5bf9\u8c61\u5168\u90e8\u4f20\u5165\u7ec4\u4ef6<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 12-6\n\nconst parmas =  {value1: 1, value2: 2, value3: 3}\n\n&lt;Test {...parmas} \/&gt;\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 12-6<\/span>\n\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">parmas<\/span> <span class=\"pl-c1\">=<\/span>  <span class=\"pl-kos\">{<\/span><span class=\"pl-c1\">value1<\/span>: <span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">value2<\/span>: <span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">value3<\/span>: <span class=\"pl-c1\">3<\/span><span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c1\">&lt;<\/span><span class=\"pl-v\">Test<\/span> <span class=\"pl-kos\">{<\/span>...<span class=\"pl-s1\">parmas<\/span><span class=\"pl-kos\">}<\/span> <span class=\"pl-c1\">\/<\/span><span class=\"pl-c1\">&gt;<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">13. \u53cc\u5192\u53f7\u8fd0\u7b97\u7b26<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 13-1\n\nfoo::bar;\n\/\/ \u7b49\u540c\u4e8e\nbar.bind(foo);\n\nfoo::bar(...arguments);\n\/\/ \u7b49\u540c\u4e8e\nbar.apply(foo, arguments);\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 13-1<\/span>\n\nfoo::<span class=\"pl-s1\">bar<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-c\">\/\/ \u7b49\u540c\u4e8e<\/span>\n<span class=\"pl-s1\">bar<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">bind<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">foo<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\nfoo::<span class=\"pl-en\">bar<\/span><span class=\"pl-kos\">(<\/span>...<span class=\"pl-smi\">arguments<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-c\">\/\/ \u7b49\u540c\u4e8e<\/span>\n<span class=\"pl-s1\">bar<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">apply<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">foo<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-smi\">arguments<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u5982\u679c\u53cc\u5192\u53f7\u5de6\u8fb9\u4e3a\u7a7a\uff0c\u53f3\u8fb9\u662f\u4e00\u4e2a\u5bf9\u8c61\u7684\u65b9\u6cd5\uff0c\u5219\u7b49\u4e8e\u5c06\u8be5\u65b9\u6cd5\u7ed1\u5b9a\u5728\u8be5\u5bf9\u8c61\u4e0a\u9762\u3002<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 13-2\n\nvar method = obj::obj.foo;\n\/\/ \u7b49\u540c\u4e8e\nvar method = ::obj.foo;\n\nlet log = ::console.log;\n\/\/ \u7b49\u540c\u4e8e\nvar log = console.log.bind(console);\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 13-2<\/span>\n\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">method<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">obj<\/span>::<span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">foo<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-c\">\/\/ \u7b49\u540c\u4e8e<\/span>\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">method<\/span> <span class=\"pl-c1\">=<\/span> ::<span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">foo<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">let<\/span> <span class=\"pl-s1\">log<\/span> <span class=\"pl-c1\">=<\/span> ::<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">log<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-c\">\/\/ \u7b49\u540c\u4e8e<\/span>\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">log<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">log<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">bind<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">14. \u89e3\u6784\u8d4b\u503c<\/h2>\n<h3 dir=\"auto\">1. \u5bf9\u8c61\u7684\u57fa\u672c\u89e3\u6784<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 14-1\n\ncomponentWillReceiveProps(newProps) {\n\tthis.setState({\n\t\tactive: newProps.active\n\t})\n}\n\ncomponentWillReceiveProps({active}) {\n\tthis.setState({active})\n}\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 14-1<\/span>\n\n<span class=\"pl-en\">componentWillReceiveProps<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">newProps<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\"><\/span> <span class=\"pl-kos\">{<\/span>\n\t<span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">setState<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">{<\/span>\n\t\t<span class=\"pl-c1\">active<\/span>: <span class=\"pl-s1\">newProps<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">active<\/span>\n\t<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-en\">componentWillReceiveProps<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">{<\/span>active<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\"><\/span> <span class=\"pl-kos\">{<\/span>\n\t<span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">setState<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">{<\/span>active<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content='\/\/ \u4f8b\u5b50 14-2\n\n\/\/ bad\nhandleEvent = () =&gt; {\n  this.setState({\n    data: this.state.data.set(\"key\", \"value\")\n  })\n};\n\n\/\/ good\nhandleEvent = () =&gt; {\n  this.setState(({data}) =&gt; ({\n    data: data.set(\"key\", \"value\")\n  }))\n};'><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 14-2<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-en\">handleEvent<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">setState<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-c1\">data<\/span>: <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">state<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">data<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">set<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">\"key\"<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">\"value\"<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-en\">handleEvent<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-smi\">this<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">setState<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">{<\/span>data<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-c1\">data<\/span>: <span class=\"pl-s1\">data<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">set<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">\"key\"<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">\"value\"<\/span><span class=\"pl-kos\">)<\/span>\n  <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 14-3\n\nPromise.all([Promise.resolve(1), Promise.resolve(2)])\n.then(([x, y]) =&gt; {\n    console.log(x, y);\n});\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 14-3<\/span>\n\n<span class=\"pl-v\">Promise<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">all<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-v\">Promise<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">resolve<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-v\">Promise<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">resolve<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">)<\/span>\n<span class=\"pl-kos\">.<\/span><span class=\"pl-en\">then<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">x<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">y<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">x<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">y<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">2. \u5bf9\u8c61\u6df1\u5ea6\u89e3\u6784<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 14-4\n\n\/\/ bad\nfunction test(fruit) {\n  if (fruit &amp;&amp; fruit.name)  {\n    console.log (fruit.name);\n  } else {\n    console.log('unknown');\n  }\n}\n\n\/\/ good\nfunction test({name} = {}) {\n  console.log (name || 'unknown');\n}\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 14-4<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">test<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">fruit<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">fruit<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">fruit<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">name<\/span><span class=\"pl-kos\">)<\/span>  <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">fruit<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">name<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span> <span class=\"pl-k\">else<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'unknown'<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">test<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">{<\/span>name<span class=\"pl-kos\">}<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">name<\/span> <span class=\"pl-c1\">||<\/span> <span class=\"pl-s\">'unknown'<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 14-5\n\nlet obj = {\n    a: {\n      b: {\n        c: 1\n      }\n    }\n};\n\nconst {a: {b: {c = ''} = ''} = ''} = obj;\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 14-5<\/span>\n\n<span class=\"pl-k\">let<\/span> <span class=\"pl-s1\">obj<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-c1\">a<\/span>: <span class=\"pl-kos\">{<\/span>\n      <span class=\"pl-c1\">b<\/span>: <span class=\"pl-kos\">{<\/span>\n        <span class=\"pl-c1\">c<\/span>: <span class=\"pl-c1\">1<\/span>\n      <span class=\"pl-kos\">}<\/span>\n    <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">const<\/span> <span class=\"pl-kos\">{<\/span><span class=\"pl-c1\">a<\/span>: <span class=\"pl-kos\">{<\/span><span class=\"pl-c1\">b<\/span>: <span class=\"pl-kos\">{<\/span>c <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">''<\/span><span class=\"pl-kos\">}<\/span> <span class=\"pl-c1\">=<\/span> '<span class=\"pl-s\">'} = '<\/span>'} = obj;<\/pre>\n<\/div>\n<h3 dir=\"auto\">3. \u6570\u7ec4\u89e3\u6784<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 14-6\n\n\/\/ bad\nconst splitLocale = locale.split(&quot;-&quot;);\nconst language = splitLocale[0];\nconst country = splitLocale[1];\n\n\/\/ good\nconst [language, country] = locale.split('-');\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 14-6<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">splitLocale<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">locale<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">split<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">\"-\"<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">language<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">splitLocale<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-c1\">0<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">country<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">splitLocale<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">language<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">country<\/span><span class=\"pl-kos\">]<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">locale<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">split<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'-'<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">4. \u53d8\u91cf\u91cd\u547d\u540d<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 14-8\n\nlet { foo: baz } = { foo: 'aaa', bar: 'bbb' };\nconsole.log(baz); \/\/ &quot;aaa&quot;\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 14-8<\/span>\n\n<span class=\"pl-k\">let<\/span> <span class=\"pl-kos\">{<\/span> <span class=\"pl-c1\">foo<\/span>: <span class=\"pl-s1\">baz<\/span> <span class=\"pl-kos\">}<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span> <span class=\"pl-c1\">foo<\/span>: <span class=\"pl-s\">'aaa'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">bar<\/span>: <span class=\"pl-s\">'bbb'<\/span> <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">baz<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ \"aaa\"<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">5. \u4ec5\u83b7\u53d6\u90e8\u5206\u5c5e\u6027<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 14-9\n\nfunction test(input) {\n  return [left, right, top, bottom];\n}\nconst [left, __, top] = test(input);\n\nfunction test(input) {\n  return { left, right, top, bottom };\n}\nconst { left, right } = test(input);\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 14-9<\/span>\n\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">test<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">input<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">left<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">right<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">top<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">bottom<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s1\">left<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">__<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">top<\/span><span class=\"pl-kos\">]<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">test<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">input<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">test<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">input<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-kos\">{<\/span> left<span class=\"pl-kos\">,<\/span> right<span class=\"pl-kos\">,<\/span> top<span class=\"pl-kos\">,<\/span> bottom <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-kos\">{<\/span> left<span class=\"pl-kos\">,<\/span> right <span class=\"pl-kos\">}<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-en\">test<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">input<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">15. \u589e\u5f3a\u7684\u5bf9\u8c61\u5b57\u9762\u91cf<\/h2>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 15-1\n\n\/\/ bad\nconst something = 'y'\nconst x = {\n  something: something\n}\n\n\/\/ good\nconst something = 'y'\nconst x = {\n  something\n};\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 15-1<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">something<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'y'<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">x<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-c1\">something<\/span>: <span class=\"pl-s1\">something<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">something<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s\">'y'<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">x<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span>\n  something\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u52a8\u6001\u5c5e\u6027<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 15-2\n\nconst x = {\n  ['a' + '_' + 'b']: 'z'\n}\n\nconsole.log(x.a_b); \/\/ z\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 15-2<\/span>\n\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">x<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-kos\">[<\/span><span class=\"pl-s\">'a'<\/span> <span class=\"pl-c1\">+<\/span> <span class=\"pl-s\">'_'<\/span> <span class=\"pl-c1\">+<\/span> <span class=\"pl-s\">'b'<\/span><span class=\"pl-kos\">]<\/span>: <span class=\"pl-s\">'z'<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">x<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">a_b<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ z<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">16. \u6570\u7ec4\u7684\u62d3\u5c55\u65b9\u6cd5<\/h2>\n<h3 dir=\"auto\">1. keys<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 16-1\n\nvar arr = [&quot;a&quot;, , &quot;c&quot;];\n\nvar sparseKeys = Object.keys(arr);\nconsole.log(sparseKeys); \/\/ ['0', '2']\n\nvar denseKeys = [...arr.keys()];\nconsole.log(denseKeys);  \/\/ [0, 1, 2]\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 16-1<\/span>\n\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">arr<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s\">\"a\"<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">\"c\"<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">sparseKeys<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-v\">Object<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">keys<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">arr<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">sparseKeys<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ ['0', '2']<\/span>\n\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">denseKeys<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">[<\/span>...<span class=\"pl-s1\">arr<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">keys<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">denseKeys<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>  <span class=\"pl-c\">\/\/ [0, 1, 2]<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">2. entries<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content='\/\/ \u4f8b\u5b50 16-2\n\nvar arr = [\"a\", \"b\", \"c\"];\nvar iterator = arr.entries();\n\nfor (let e of iterator) {\n    console.log(e);\n}'><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 16-2<\/span>\n\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">arr<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s\">\"a\"<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">\"b\"<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">\"c\"<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">iterator<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">arr<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">entries<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">for<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">let<\/span> <span class=\"pl-s1\">e<\/span> <span class=\"pl-k\">of<\/span> <span class=\"pl-s1\">iterator<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">e<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">3. values<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 16-3\n\nlet arr = ['w', 'y', 'k', 'o', 'p'];\nlet eArr = arr.values();\n\nfor (let letter of eArr) {\n  console.log(letter);\n}\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 16-3<\/span>\n\n<span class=\"pl-k\">let<\/span> <span class=\"pl-s1\">arr<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s\">'w'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'y'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'k'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'o'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'p'<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-k\">let<\/span> <span class=\"pl-s1\">eArr<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">arr<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">values<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">for<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-k\">let<\/span> <span class=\"pl-s1\">letter<\/span> <span class=\"pl-k\">of<\/span> <span class=\"pl-s1\">eArr<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">letter<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">4. includes<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 16-4\n\n\/\/ bad\nfunction test(fruit) {\n  if (fruit == 'apple' || fruit == 'strawberry') {\n    console.log('red');\n  }\n}\n\n\/\/ good\nfunction test(fruit) {\n  const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];\n  if (redFruits.includes(fruit)) {\n    console.log('red');\n  }\n}\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 16-4<\/span>\n\n<span class=\"pl-c\">\/\/ bad<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">test<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">fruit<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">fruit<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'apple'<\/span> <span class=\"pl-c1\">||<\/span> <span class=\"pl-s1\">fruit<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-s\">'strawberry'<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'red'<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ good<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">test<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">fruit<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">redFruits<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">[<\/span><span class=\"pl-s\">'apple'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'strawberry'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'cherry'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s\">'cranberries'<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">redFruits<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">includes<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">fruit<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s\">'red'<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">5. find<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 16-5\n\nvar inventory = [\n    {name: 'apples', quantity: 2},\n    {name: 'bananas', quantity: 0},\n    {name: 'cherries', quantity: 5}\n];\n\nfunction findCherries(fruit) {\n    return fruit.name === 'cherries';\n}\n\nconsole.log(inventory.find(findCherries)); \/\/ { name: 'cherries', quantity: 5 }\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 16-5<\/span>\n\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">inventory<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">[<\/span>\n    <span class=\"pl-kos\">{<\/span><span class=\"pl-c1\">name<\/span>: <span class=\"pl-s\">'apples'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">quantity<\/span>: <span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">,<\/span>\n    <span class=\"pl-kos\">{<\/span><span class=\"pl-c1\">name<\/span>: <span class=\"pl-s\">'bananas'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">quantity<\/span>: <span class=\"pl-c1\">0<\/span><span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">,<\/span>\n    <span class=\"pl-kos\">{<\/span><span class=\"pl-c1\">name<\/span>: <span class=\"pl-s\">'cherries'<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">quantity<\/span>: <span class=\"pl-c1\">5<\/span><span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">findCherries<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">fruit<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">fruit<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">name<\/span> <span class=\"pl-c1\">===<\/span> <span class=\"pl-s\">'cherries'<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">inventory<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">find<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">findCherries<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ { name: 'cherries', quantity: 5 }<\/span><\/pre>\n<\/div>\n<h3 dir=\"auto\">6. findIndex<\/h3>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 16-6\n\nfunction isPrime(element, index, array) {\n  var start = 2;\n  while (start &lt;= Math.sqrt(element)) {\n    if (element % start++ &lt; 1) {\n      return false;\n    }\n  }\n  return element &gt; 1;\n}\n\nconsole.log([4, 6, 8, 12].findIndex(isPrime)); \/\/ -1, not found\nconsole.log([4, 6, 7, 12].findIndex(isPrime)); \/\/ 2\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 16-6<\/span>\n\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">isPrime<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">element<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">index<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">array<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">start<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-k\">while<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">start<\/span> <span class=\"pl-c1\">&lt;=<\/span> <span class=\"pl-v\">Math<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">sqrt<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">element<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">element<\/span> <span class=\"pl-c1\">%<\/span> <span class=\"pl-s1\">start<\/span><span class=\"pl-c1\">++<\/span> <span class=\"pl-c1\">&lt;<\/span> <span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n      <span class=\"pl-k\">return<\/span> <span class=\"pl-c1\">false<\/span><span class=\"pl-kos\">;<\/span>\n    <span class=\"pl-kos\">}<\/span>\n  <span class=\"pl-kos\">}<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-s1\">element<\/span> <span class=\"pl-c1\">&gt;<\/span> <span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-c1\">4<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">6<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">8<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">12<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">findIndex<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">isPrime<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ -1, not found<\/span>\n<span class=\"pl-smi\">console<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">log<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">[<\/span><span class=\"pl-c1\">4<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">6<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">7<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c1\">12<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-en\">findIndex<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">isPrime<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ 2<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u66f4\u591a\u7684\u5c31\u4e0d\u5217\u4e3e\u4e86\u3002<\/p>\n<h2 dir=\"auto\">17. <a href=\"https:\/\/github.com\/tc39\/proposal-optional-chaining\">optional-chaining<\/a><\/h2>\n<p dir=\"auto\">\u4e3e\u4e2a\u4f8b\u5b50\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 17-1\n\nconst obj = {\n  foo: {\n    bar: {\n      baz: 42,\n    },\n  },\n};\n\nconst baz = obj?.foo?.bar?.baz; \/\/ 42\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 17-1<\/span>\n\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">obj<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-c1\">foo<\/span>: <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-c1\">bar<\/span>: <span class=\"pl-kos\">{<\/span>\n      <span class=\"pl-c1\">baz<\/span>: <span class=\"pl-c1\">42<\/span><span class=\"pl-kos\">,<\/span>\n    <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">,<\/span>\n  <span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">,<\/span>\n<span class=\"pl-kos\">}<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-k\">const<\/span> <span class=\"pl-s1\">baz<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">?.<\/span><span class=\"pl-c1\">foo<\/span><span class=\"pl-kos\">?.<\/span><span class=\"pl-c1\">bar<\/span><span class=\"pl-kos\">?.<\/span><span class=\"pl-c1\">baz<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ 42<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u540c\u6837\u652f\u6301\u51fd\u6570\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 17-2\n\nfunction test() {\n  return 42;\n}\ntest?.(); \/\/ 42\n\nexists?.(); \/\/ undefined\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 17-2<\/span>\n\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">test<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-k\">return<\/span> <span class=\"pl-c1\">42<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span>\n<span class=\"pl-en\">test<\/span><span class=\"pl-kos\">?.<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ 42<\/span>\n\n<span class=\"pl-en\">exists<\/span><span class=\"pl-kos\">?.<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ undefined<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u9700\u8981\u6dfb\u52a0 <a href=\"https:\/\/babeljs.io\/docs\/en\/babel-plugin-proposal-optional-chaining#example\" rel=\"nofollow\">@babel\/plugin-proposal-optional-chaining<\/a> \u63d2\u4ef6\u652f\u6301<\/p>\n<h2 dir=\"auto\">18. logical-assignment-operators<\/h2>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 18-1\n\na ||= b;\n\nobj.a.b ||= c;\n\na &amp;&amp;= b;\n\nobj.a.b &amp;&amp;= c;\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 18-1<\/span>\n\n<span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">||=<\/span> <span class=\"pl-s1\">b<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">a<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">b<\/span> <span class=\"pl-c1\">||=<\/span> <span class=\"pl-s1\">c<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">&amp;&amp;=<\/span> <span class=\"pl-s1\">b<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">a<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">b<\/span> <span class=\"pl-c1\">&amp;&amp;=<\/span> <span class=\"pl-s1\">c<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">Babel \u7f16\u8bd1\u4e3a\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var _obj$a, _obj$a2;\n\na || (a = b);\n\n(_obj$a = obj.a).b || (_obj$a.b = c);\n\na &amp;&amp; (a = b);\n\n(_obj$a2 = obj.a).b &amp;&amp; (_obj$a2.b = c);\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">_obj$a<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-s1\">_obj$a2<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">||<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">b<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">_obj$a<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">a<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">b<\/span> <span class=\"pl-c1\">||<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">_obj$a<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">b<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">c<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">b<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">_obj$a2<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">obj<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">a<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">b<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">_obj$a2<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">b<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">c<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u51fa\u73b0\u7684\u539f\u56e0\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\/\/ \u4f8b\u5b50 18-2\n\nfunction example(a = b) {\n  \/\/ a \u5fc5\u987b\u662f undefined\n  if (!a) {\n    a = b;\n  }\n}\n\nfunction numeric(a = b) {\n  \/\/ a \u5fc5\u987b\u662f null \u6216\u8005 undefined\n  if (a == null) {\n    a = b;\n  }\n}\n\n\/\/ a \u53ef\u4ee5\u662f\u4efb\u4f55 falsy \u7684\u503c\nfunction example(a = b) {\n  \/\/ \u53ef\u4ee5\uff0c\u4f46\u662f\u4e00\u5b9a\u4f1a\u89e6\u53d1 setter\n  a = a || b;\n\n  \/\/ \u4e0d\u4f1a\u89e6\u53d1 setter\uff0c\u4f46\u53ef\u80fd\u4f1a\u5bfc\u81f4 lint error\n  a || (a = b);\n\n  \/\/ \u5c31\u6709\u4eba\u63d0\u51fa\u4e86\u8fd9\u79cd\u5199\u6cd5\uff1a\n  a ||= b;\n}\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-c\">\/\/ \u4f8b\u5b50 18-2<\/span>\n\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">example<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">b<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-c\">\/\/ a \u5fc5\u987b\u662f undefined<\/span>\n  <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">!<\/span><span class=\"pl-s1\">a<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">b<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">numeric<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">b<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-c\">\/\/ a \u5fc5\u987b\u662f null \u6216\u8005 undefined<\/span>\n  <span class=\"pl-k\">if<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">==<\/span> <span class=\"pl-c1\">null<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n    <span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">b<\/span><span class=\"pl-kos\">;<\/span>\n  <span class=\"pl-kos\">}<\/span>\n<span class=\"pl-kos\">}<\/span>\n\n<span class=\"pl-c\">\/\/ a \u53ef\u4ee5\u662f\u4efb\u4f55 falsy \u7684\u503c<\/span>\n<span class=\"pl-k\">function<\/span> <span class=\"pl-en\">example<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">b<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-kos\">{<\/span>\n  <span class=\"pl-c\">\/\/ \u53ef\u4ee5\uff0c\u4f46\u662f\u4e00\u5b9a\u4f1a\u89e6\u53d1 setter<\/span>\n  <span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">||<\/span> <span class=\"pl-s1\">b<\/span><span class=\"pl-kos\">;<\/span>\n\n  <span class=\"pl-c\">\/\/ \u4e0d\u4f1a\u89e6\u53d1 setter\uff0c\u4f46\u53ef\u80fd\u4f1a\u5bfc\u81f4 lint error<\/span>\n  <span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">||<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">b<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span>\n\n  <span class=\"pl-c\">\/\/ \u5c31\u6709\u4eba\u63d0\u51fa\u4e86\u8fd9\u79cd\u5199\u6cd5\uff1a<\/span>\n  <span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">||=<\/span> <span class=\"pl-s1\">b<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u9700\u8981 <a href=\"https:\/\/babeljs.io\/docs\/en\/babel-plugin-proposal-logical-assignment-operators\" rel=\"nofollow\">@babel\/plugin-proposal-logical-assignment-operators<\/a> \u63d2\u4ef6\u652f\u6301<\/p>\n<h2 dir=\"auto\">19. nullish-coalescing-operator<\/h2>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"a ?? b\n\n\/\/ \u76f8\u5f53\u4e8e\n\n(a !== null &amp;&amp; a !== void 0) ? a : b\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">??<\/span> <span class=\"pl-en\">b<\/span>\n\n<span class=\"pl-c\">\/\/ \u76f8\u5f53\u4e8e<\/span>\n\n<span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">!==<\/span> <span class=\"pl-c1\">null<\/span> <span class=\"pl-c1\">&amp;&amp;<\/span> <span class=\"pl-s1\">a<\/span> <span class=\"pl-c1\">!==<\/span> <span class=\"pl-k\">void<\/span> <span class=\"pl-c1\">0<\/span><span class=\"pl-kos\">)<\/span> ? <span class=\"pl-s1\">a<\/span> : <span class=\"pl-s1\">b<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u4e3e\u4e2a\u4f8b\u5b50\uff1a<\/p>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content='var foo = object.foo ?? \"default\";\n\n\/\/ \u76f8\u5f53\u4e8e\n\nvar foo = (object.foo != null) ? object.foo : \"default\";'><\/p>\n<pre class=\"notranslate\"><span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">foo<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-s1\">object<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">foo<\/span> <span class=\"pl-c1\">??<\/span> <span class=\"pl-s\">\"default\"<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ \u76f8\u5f53\u4e8e<\/span>\n\n<span class=\"pl-k\">var<\/span> <span class=\"pl-s1\">foo<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">object<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">foo<\/span> <span class=\"pl-c1\">!=<\/span> <span class=\"pl-c1\">null<\/span><span class=\"pl-kos\">)<\/span> ? <span class=\"pl-s1\">object<\/span><span class=\"pl-kos\">.<\/span><span class=\"pl-c1\">foo<\/span> : <span class=\"pl-s\">\"default\"<\/span><span class=\"pl-kos\">;<\/span><\/pre>\n<\/div>\n<p dir=\"auto\">\u9700\u8981 <a href=\"https:\/\/babeljs.io\/docs\/en\/babel-plugin-proposal-nullish-coalescing-operator\" rel=\"nofollow\">@babel\/plugin-proposal-nullish-coalescing-operator<\/a> \u63d2\u4ef6\u652f\u6301<\/p>\n<h2 dir=\"auto\">20. pipeline-operator<\/h2>\n<div class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"const double = (n) =&gt; n * 2;\nconst increment = (n) =&gt; n + 1;\n\n\/\/ \u6ca1\u6709\u7528\u7ba1\u9053\u64cd\u4f5c\u7b26\ndouble(increment(double(5))); \/\/ 22\n\n\/\/ \u7528\u4e0a\u7ba1\u9053\u64cd\u4f5c\u7b26\u4e4b\u540e\n5 |&gt; double |&gt; increment |&gt; double; \/\/ 22\"><\/p>\n<pre class=\"notranslate\"><span class=\"pl-k\">const<\/span> <span class=\"pl-en\">double<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">n<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-s1\">n<\/span> <span class=\"pl-c1\">*<\/span> <span class=\"pl-c1\">2<\/span><span class=\"pl-kos\">;<\/span>\n<span class=\"pl-k\">const<\/span> <span class=\"pl-en\">increment<\/span> <span class=\"pl-c1\">=<\/span> <span class=\"pl-kos\">(<\/span><span class=\"pl-s1\">n<\/span><span class=\"pl-kos\">)<\/span> <span class=\"pl-c1\">=&gt;<\/span> <span class=\"pl-s1\">n<\/span> <span class=\"pl-c1\">+<\/span> <span class=\"pl-c1\">1<\/span><span class=\"pl-kos\">;<\/span>\n\n<span class=\"pl-c\">\/\/ \u6ca1\u6709\u7528\u7ba1\u9053\u64cd\u4f5c\u7b26<\/span>\n<span class=\"pl-en\">double<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-en\">increment<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-en\">double<\/span><span class=\"pl-kos\">(<\/span><span class=\"pl-c1\">5<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">)<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ 22<\/span>\n\n<span class=\"pl-c\">\/\/ \u7528\u4e0a\u7ba1\u9053\u64cd\u4f5c\u7b26\u4e4b\u540e<\/span>\n<span class=\"pl-c1\">5<\/span> <span class=\"pl-c1\">|<\/span><span class=\"pl-c1\">&gt;<\/span> <span class=\"pl-en\">double<\/span> <span class=\"pl-c1\">|<\/span><span class=\"pl-c1\">&gt;<\/span> <span class=\"pl-en\">increment<\/span> <span class=\"pl-c1\">|<\/span><span class=\"pl-c1\">&gt;<\/span> <span class=\"pl-en\">double<\/span><span class=\"pl-kos\">;<\/span> <span class=\"pl-c\">\/\/ 22<\/span><\/pre>\n<\/div>\n<h2 dir=\"auto\">\u5176\u4ed6<\/h2>\n<p dir=\"auto\">\u65b0\u5f00\u4e86 <a href=\"https:\/\/zhuanlan.zhihu.com\/c_1042806379215601664\" rel=\"nofollow\">\u77e5\u4e4e\u4e13\u680f<\/a>\uff0c\u5927\u5bb6\u53ef\u4ee5\u5728\u66f4\u591a\u7684\u5e73\u53f0\u4e0a\u770b\u5230\u6211\u7684\u6587\u7ae0\uff0c\u6b22\u8fce\u5173\u6ce8\u54e6~<\/p>\n<h2 dir=\"auto\">\u53c2\u8003<\/h2>\n<ol start=\"2\" dir=\"auto\">\n<li><a href=\"https:\/\/juejin.im\/post\/5934ff6d2f301e005861422f\" rel=\"nofollow\">ES6 \u5b9e\u8df5\u89c4\u8303<\/a><\/li>\n<li><a href=\"https:\/\/juejin.im\/post\/5b87cab1e51d4538ac05dc54\" rel=\"nofollow\">babel 7 \u7b80\u5355\u5347\u7ea7\u6307\u5357<\/a><\/li>\n<li><a href=\"https:\/\/mp.weixin.qq.com\/s\/NAbvosbJ4utOgFaM-6wO4Q?\" rel=\"nofollow\">\u4e0d\u5f97\u4e0d\u77e5\u7684 ES6 \u5c0f\u6280\u5de7<\/a><\/li>\n<li><a href=\"http:\/\/bubkoo.com\/2015\/07\/24\/es6-in-depth-symbols\/\" rel=\"nofollow\">\u6df1\u5165\u89e3\u6790 ES6\uff1aSymbol<\/a><\/li>\n<li><a href=\"https:\/\/zhuanlan.zhihu.com\/p\/26540168\" rel=\"nofollow\">\u4ec0\u4e48\u65f6\u5019\u4f60\u4e0d\u80fd\u4f7f\u7528\u7bad\u5934\u51fd\u6570\uff1f<\/a><\/li>\n<li><a href=\"https:\/\/www.css88.com\/archives\/9868\" rel=\"nofollow\">\u4e00\u4e9b\u4f7f JavaScript \u66f4\u52a0\u7b80\u6d01\u7684\u5c0f\u6280\u5de7<\/a><\/li>\n<li><a href=\"https:\/\/www.css88.com\/archives\/9916\" rel=\"nofollow\">\u51e0\u5206\u949f\u5185\u63d0\u5347\u6280\u80fd\u7684 8 \u4e2a JavaScript \u65b9\u6cd5<\/a><\/li>\n<li><a href=\"https:\/\/juejin.im\/post\/5bb47db76fb9a05d071953ea\" rel=\"nofollow\">[\u8bd1] \u5982\u4f55\u4f7f\u7528 JavaScript ES6 \u6709\u6761\u4ef6\u5730\u6784\u9020\u5bf9\u8c61<\/a><\/li>\n<li><a href=\"https:\/\/www.css88.com\/archives\/9865\" rel=\"nofollow\">5 \u4e2a\u6280\u5de7\u8ba9\u4f60\u66f4\u597d\u7684\u7f16\u5199 JavaScript(ES6) \u4e2d\u6761\u4ef6\u8bed\u53e5<\/a><\/li>\n<li><a href=\"https:\/\/www.css88.com\/archives\/9958\" rel=\"nofollow\">ES6 \u5e26\u6765\u7684\u91cd\u5927\u7279\u6027 \u2013 JavaScript \u5b8c\u5168\u624b\u518c\uff082018\u7248\uff09<\/a><\/li>\n<\/ol>\n<h2 dir=\"auto\">ES6 \u7cfb\u5217<\/h2>\n<p dir=\"auto\">ES6 \u7cfb\u5217\u76ee\u5f55\u5730\u5740\uff1a<a href=\"https:\/\/github.com\/mqyqingfeng\/Blog\">https:\/\/github.com\/mqyqingfeng\/Blog<\/a><\/p>\n<p dir=\"auto\">ES6 \u7cfb\u5217\u9884\u8ba1\u5199\u4e8c\u5341\u7bc7\u5de6\u53f3\uff0c\u65e8\u5728\u52a0\u6df1 ES6 \u90e8\u5206\u77e5\u8bc6\u70b9\u7684\u7406\u89e3\uff0c\u91cd\u70b9\u8bb2\u89e3\u5757\u7ea7\u4f5c\u7528\u57df\u3001\u6807\u7b7e\u6a21\u677f\u3001\u7bad\u5934\u51fd\u6570\u3001Symbol\u3001Set\u3001Map \u4ee5\u53ca Promise \u7684\u6a21\u62df\u5b9e\u73b0\u3001\u6a21\u5757\u52a0\u8f7d\u65b9\u6848\u3001\u5f02\u6b65\u5904\u7406\u7b49\u5185\u5bb9\u3002<\/p>\n<\/td>\n<p>\u6587\u7ae0\u8f6c\u8f7d\u81ea<a href='https:\/\/github.com\/mqyqingfeng\/Blog\/issues\/111'>https:\/\/github.com\/mqyqingfeng\/Blog\/issues\/111<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u8a00 \u8fd9\u91cc\u7684 &#8220;ES6&#8221; \u6cdb\u6307 ES5 \u4e4b\u540e\u7684\u65b0\u8bed\u6cd5 \u8fd9\u91cc\u7684 &#8220;\u5b8c\u5168&#8221; \u662f\u6307\u672c\u6587\u5c3d\u53ef\u80fd\u9f50\u5168 \u8fd9\u91cc\u7684 &#038;#8220&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.lccc.top\/?p=1353\"> Read More<span class=\"screen-reader-text\">  Read More<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1353","post","type-post","status-publish","format-standard","hentry","category-learn"],"_links":{"self":[{"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/posts\/1353"}],"collection":[{"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lccc.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1353"}],"version-history":[{"count":1,"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/posts\/1353\/revisions"}],"predecessor-version":[{"id":1459,"href":"https:\/\/www.lccc.top\/index.php?rest_route=\/wp\/v2\/posts\/1353\/revisions\/1459"}],"wp:attachment":[{"href":"https:\/\/www.lccc.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1353"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lccc.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1353"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lccc.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}