<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>展开运算符 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/%E5%B1%95%E5%BC%80%E8%BF%90%E7%AE%97%E7%AC%A6/</link><description>Recent content in 展开运算符 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 03 Jan 2025 00:00:00 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/%E5%B1%95%E5%BC%80%E8%BF%90%E7%AE%97%E7%AC%A6/index.xml" rel="self" type="application/rss+xml"/><item><title>展开运算符</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/es6/es6-006/</link><pubDate>Wed, 02 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/es6/es6-006/</guid><description>&lt;p&gt;ES6 新增了很多特性，扩展运算符就是其中一个。简单的三个点号，让原本繁琐的代码瞬间变得简洁、优雅。就让我们看看它有哪些常见用法吧。&lt;/p&gt;
&lt;h2 id="让函数的-apply-调用方式成为过去"&gt;让函数的 Apply 调用方式成为过去&lt;/h2&gt;
&lt;p&gt;有时候我们需要通过 &lt;code&gt;Function.prototype.apply&lt;/code&gt; 来调用函数，参数就放在一个数组里。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;function doStuff (x, y, z) { }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; args &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;//&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;调用函数并传参&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;doStuff&lt;span style="color:#f92672"&gt;.&lt;/span&gt;apply(null, args);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;现在有了展开运算符，我们可以完全避免使用 &lt;code&gt;apply&lt;/code&gt;，只需在调用函数时在数组前加上展开运算符：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;doStuff(...args);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;代码变得更短、更简洁，也不需要一个毫无用处的 &lt;code&gt;null&lt;/code&gt;！&lt;/p&gt;
&lt;h2 id="合并数组"&gt;合并数组&lt;/h2&gt;
&lt;p&gt;合并数组有各种方式，但是展开运算符为我们提供了一种新思路：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;arr1.push(...arr2) // 在数组后面添加 arr2 里的元素
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;arr1.unshift(...arr2) //在数组前面添加 arr2 里的元素
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果你想合并两个数组，并且想把元素放到数组中的任何位置，你可以这么做：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; arr1 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [&lt;span style="color:#e6db74"&gt;&amp;#39;two&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;three&amp;#39;&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; arr2 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [&lt;span style="color:#e6db74"&gt;&amp;#39;one&amp;#39;&lt;/span&gt;, &lt;span style="color:#f92672"&gt;...&lt;/span&gt;arr1, &lt;span style="color:#e6db74"&gt;&amp;#39;four&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;five&amp;#39;&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;//&lt;/span&gt; [&lt;span style="color:#e6db74"&gt;&amp;#34;one&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;two&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;three&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;four&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;five&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;代码少了很多，还可以随意控制位置！&lt;/p&gt;
&lt;h2 id="拷贝数组"&gt;拷贝数组&lt;/h2&gt;
&lt;p&gt;拷贝数组是个常见的任务，过去我们使用 &lt;code&gt;Array.prototype.slice&lt;/code&gt;&lt;br&gt;
来完成，但现在我们可以通过展开运算符得到数组的副本：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; arr &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; arr2 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [&lt;span style="color:#f92672"&gt;...&lt;/span&gt;arr]; &lt;span style="color:#f92672"&gt;//&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;等同于&lt;/span&gt; arr&lt;span style="color:#f92672"&gt;.&lt;/span&gt;slice()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;arr2&lt;span style="color:#f92672"&gt;.&lt;/span&gt;push(&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里要注意，数组里的对象仍然是引用类型的，因此实际上并不是所有内容都被“拷贝”了。&lt;/p&gt;
&lt;h2 id="将参数或-nodelist-转成数组"&gt;将参数或 NodeList 转成数组&lt;/h2&gt;
&lt;p&gt;跟拷贝数组类似，我们用 &lt;code&gt;Array.Prototype.slice&lt;/code&gt; 将 &lt;code&gt;NodeList&lt;/code&gt;和 &lt;code&gt;arguments&lt;/code&gt; 对象转成真正的数组，但是现在我们可以使用展开运算符完成这个任务：&lt;/p&gt;</description></item></channel></rss>