點燈坊

失くすものさえない今が強くなるチャンスよ

Iterable 也能使用 Destructuring

Sam Xiao's Avatar 2019-08-19

一般 Destructuring 都用在 Array 與 Object,事實上也能用在 Iterable 上。

Version

macOS Mojave 10.14.6
VS Code 1.37.1
Quokka 1.0.240
ECMAScript 2015

Iterable

let bookShelf = {
  data: [
    { title: 'FP in JavaScript', price: 100 },
    { title: 'RxJS in Action', price: 200 },
    { title: 'Speaking JavaScript', price: 300 }
  ],
  *[Symbol.iterator]() {
    for(let x of this.data)
      yield x.title;
  }
};

let [firtTitle] = bookShelf;
let [,secondTitle] = bookShelf;

firtTitle; // ?
secondTitle; // ?

使用 ECMAScript 內建的 iterable 不稀奇,我們自己建立一個 iterable。

在此就不深入探討 iterable 、iterator 與 generator function,畢竟本文重點在 destructuring

13 行

let [firtTitle] = bookShelf;
let [,secondTitle] = bookShelf;

firtTitle; // ?
secondTitle; // ?

bookShelf iterable 拆解,第一個 element 為 firstTitle,第二個 element 為 secondTitle

用法與 array destructuring 一樣,但重點 bookShelf 並非 array,而是 iterable。

destructuring000

Conclusion

  • 既然自建的 iterable 能使用 destructuring,則內建的 String、Map、Set、TypedArray 也都能使用 destructuring