mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-12-15 15:20:30 +08:00
语法高亮,滚动条美化,设置页面调整
This commit is contained in:
@@ -6,10 +6,10 @@
|
||||
<p></p> <p></p>
|
||||
<p><strong>数组推导式</strong>是一种 JavaScript 表达式语法,使用它,你可以在一个原有数组的基础上快速的构造出一个新的数组。但是它已经从标准和火狐中移除。不要用它!</p>
|
||||
<h2 id="语法">语法</h2>
|
||||
<pre class="syntaxbox">[for (x of iterable) x]
|
||||
<pre><code class="language-javascript">[for (x of iterable) x]
|
||||
[for (x of iterable) if (condition) x]
|
||||
[for (x of iterable) for (y of iterable) x + y]
|
||||
</pre>
|
||||
</code></pre>
|
||||
<h2 id="描述">描述</h2>
|
||||
<p>在数组推导式内部,可以使用下面两种子语句:</p>
|
||||
<ul>
|
||||
@@ -19,14 +19,14 @@
|
||||
<p>每个 <code>for-of</code> 语句都放在与其配对的 <code>if</code> 语句(可以有多个,也可以完全省略)的左边,每个数组推导式中可以包含多组这样的配对,但最终选取的表达式值只能有一个,且这个值(也可以是个数组推导式,也就是说可以嵌套)只能放在推导式的最右边,紧靠着右中括号。</p>
|
||||
<h2 id="示例">示例</h2>
|
||||
<h3 id="基本的数组推导式写法">基本的数组推导式写法</h3>
|
||||
<pre class="brush:js">[for (i of [ 1, 2, 3 ]) i*i ];
|
||||
<pre><code class="language-js">[for (i of [ 1, 2, 3 ]) i*i ];
|
||||
// [ 1, 4, 9 ]
|
||||
|
||||
var abc = [ "A", "B", "C" ];
|
||||
[for (letters of abc) letters.toLowerCase()];
|
||||
// [ "a", "b", "c" ]</pre>
|
||||
// [ "a", "b", "c" ]</code></pre>
|
||||
<h3 id="带有_if_语句的数组推导式">带有 if 语句的数组推导式</h3>
|
||||
<pre class="brush: js">var years = [ 1954, 1974, 1990, 2006, 2010, 2014 ];
|
||||
<pre><code class="language-javascript">var years = [ 1954, 1974, 1990, 2006, 2010, 2014 ];
|
||||
|
||||
[for (year of years) if (year > 2000) year];
|
||||
// [ 2006, 2010, 2014 ]
|
||||
@@ -36,10 +36,10 @@ var abc = [ "A", "B", "C" ];
|
||||
|
||||
[for (year of years) if (year > 2000 && year < 2010) year];
|
||||
// [ 2006]
|
||||
</pre>
|
||||
</code></pre>
|
||||
<h3 id="用数组推导式比用数组的_map、filter_方法更简洁">用数组推导式比用数组的 <code>map</code>、<code>filter</code> 方法更简洁</h3>
|
||||
<p>对比数组的 <a href="Reference/Global_Objects/Array/map" title="map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。"><code>map</code></a> 和 <a href="Reference/Global_Objects/Array/filter" title="filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。"><code>filter</code></a> 方法:</p>
|
||||
<pre class="brush: js">var numbers = [ 1, 2, 3 ];
|
||||
<pre><code class="language-javascript">var numbers = [ 1, 2, 3 ];
|
||||
|
||||
numbers.map(function (i) { return i * i });
|
||||
[for (i of numbers) i*i ];
|
||||
@@ -48,10 +48,10 @@ numbers.map(function (i) { return i * i });
|
||||
numbers.filter(function (i) { return i < 3 });
|
||||
[for (i of numbers) if (i < 3) i];
|
||||
// 返回值都是 [ 1, 2 ]
|
||||
</pre>
|
||||
</code></pre>
|
||||
<h3 id="带有两个数组的数组推导式">带有两个数组的数组推导式</h3>
|
||||
<p>用两个 <code>for-of</code> 语句迭代两个不同的数组:</p>
|
||||
<pre class="brush: js">var numbers = [ 1, 2, 3 ];
|
||||
<pre><code class="language-javascript">var numbers = [ 1, 2, 3 ];
|
||||
var letters = [ "a", "b", "c" ];
|
||||
|
||||
var cross = [for (i of numbers) for (j of letters) i+j];
|
||||
@@ -75,7 +75,7 @@ var grid = [for (i of numbers) [for (j of letters) i+j]];
|
||||
|
||||
[for (i of numbers) [for (j of letters) if (i > 1) if(j > "a") i+j]]
|
||||
// [[], ["2b", "2c"], ["3b", "3c"]]
|
||||
</pre>
|
||||
</code></pre>
|
||||
<h2 id="规范">规范</h2>
|
||||
<p>最初起草在ECMAScript 6草案中,但在第27版(2014年8月)中被移除。 请参阅ES 6的旧修订版的规范语义。</p>
|
||||
<h2 id="浏览器兼容性">浏览器兼容性</h2>
|
||||
@@ -129,10 +129,10 @@ var grid = [for (i of numbers) [for (j of letters) i+j]];
|
||||
<p> </p>
|
||||
<div class="warning">JS1.7/JS1.8数组推导 在Gecko的46版本中已经被移除了 (<a class="external" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1220564" rel="noopener" title="FIXED: Remove legacy array/generator comprehension.">bug 1220564</a>).</div>
|
||||
<p><strong>旧版数组推导语法 (请不要再使用了!):</strong></p>
|
||||
<pre class="brush: js example-bad">[X for (Y in Z)]
|
||||
<pre><code class="language-js example-bad">[X for (Y in Z)]
|
||||
[X for each (Y in Z)]
|
||||
[X for (Y of Z)]
|
||||
</pre>
|
||||
</code></pre>
|
||||
<p>不同点:</p>
|
||||
<ul>
|
||||
<li>ESNext数组推导为每个"for"创建了一个作用域而取代了整个作用域.
|
||||
|
||||
Reference in New Issue
Block a user