<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 1.數組的解構賦值 ~~~javascript let [a, b, c] = [1, 2, 3]; ~~~ 上面代碼表示,可以從數組中提取值,按照對應位置,對變量賦值。 本質上,這種寫法屬于“模式匹配”,只要等號兩邊的模式相同,左邊的變量就會被賦予對應的值。下面是一些使用嵌套數組進行解構的例子。 ~~~javascript let [foo, [[bar], baz]] = [1, [[2], 3]]; foo // 1 bar // 2 baz // 3 let [ , , third] = ["foo", "bar", "baz"]; third // "baz" let [x, , y] = [1, 2, 3]; x // 1 y // 3 let [head, ...tail] = [1, 2, 3, 4]; head // 1 tail // [2, 3, 4] let [x, y, ...z] = ['a']; x // "a" y // undefined z // [] ~~~ >如果解構不成功,變量的值就等于 undefined。 ~~~javascript let [foo] = []; let [bar, foo] = [1]; ~~~ 以上兩種情況都屬于解構不成功,`foo`的值都會等于`undefined`。 另一種情況是不完全解構,即等號左邊的模式,只匹配一部分的等號右邊的數組。這種情況下,解構依然可以成功。 ~~~javascript let [x, y] = [1, 2, 3]; x // 1 y // 2 let [a, [b], d] = [1, [2, 3], 4]; a // 1 b // 2 d // 4 ~~~ 上面兩個例子,都屬于不完全解構,但是可以成功。 如果等號的右邊不是數組(或者嚴格地說,不是可遍歷的結構,參見《Iterator》一章),那么將會報錯。 ~~~javascript // 報錯 let [foo] = 1; let [foo] = false; let [foo] = NaN; let [foo] = undefined; let [foo] = null; let [foo] = {}; ~~~ 上面的語句都會報錯,因為等號右邊的值,要么轉為對象以后不具備 Iterator 接口(前五個表達式),要么本身就不具備 Iterator 接口(最后一個表達式)。 對于 Set 結構,也可以使用數組的解構賦值。 ~~~javascript let [x, y, z] = new Set(['a', 'b', 'c']); x // "a" ~~~ 事實上,只要某種數據結構具有 Iterator 接口,都可以采用數組形式的解構賦值。 ~~~javascript function* fibs() { let a = 0; let b = 1; while (true) { yield a; [a, b] = [b, a + b]; } } let [first, second, third, fourth, fifth, sixth] = fibs(); sixth // 5 ~~~ 解構賦值允許指定默認值。 ~~~javascript let [foo = true] = []; foo // true let [x, y = 'b'] = ['a']; // x='a', y='b' let [x, y = 'b'] = ['a', undefined]; // x='a', y='b' ~~~ 注意,ES6 內部使用嚴格相等運算符(`===`),判斷一個位置是否有值。所以,只有當一個數組成員嚴格等于`undefined`,默認值才會生效。 ~~~javascript let [x = 1] = [undefined]; x // 1 let [x = 1] = [null]; x // null ~~~ ~~~javascript x // null ~~~ 上面代碼中,如果一個數組成員是`null`,默認值就不會生效,因為`null`不嚴格等于`undefined`。 如果默認值是一個表達式,那么這個表達式是惰性求值的,即只有在用到的時候,才會求值。 ~~~javascript function f() { console.log('aaa'); } let [x = f()] = [1]; ~~~ 上面代碼中,因為`x`能取到值,所以函數`f`根本不會執行。上面的代碼其實等價于下面的代碼。 ~~~javascript let x; if ([1][0] === undefined) { x = f(); } else { x = [1][0]; } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看