Variable Declarations 裡提了許多 JavaScript 使用 var 宣告變數時的奇妙現象,然後解說為什麼要改用 let。這部份我偷懶跳過去了,我的想法是,就都改用 let 吧。
另外有提到 Destructuring,就是類似 Python 的 unpack :
// JavaScript/TypeScript let input = [1, 2]; let [first, second] = input;Python 則是:
# Python first, second = (1, 2)也跟 Python 3 一樣,有取 remain items 的效果:
let [first, ...rest] = [1, 2, 3, 4]; console.log(first); // outputs 1 console.log(rest); // outputs [ 2, 3, 4 ]Object destructuring 是個比較特別的東西,意思跟 destructuring 差不多,但對象是 object,也就是可以將 object 的某幾個屬性放到變數裡。
let o = { a: "foo", b: 12, c: "bar" } let { a, b } = o; ({ a, b } = { a: "baz", b: 101 }); // 這樣也可也支援 remaining items 的方法:
let { a, ...passthrough } = o;Object destructuring 還支援 default values,意思是如果 wholeObject 沒有 b 屬性時,就把 b 指定為 1001:
function keepWholeObject(wholeObject: { a: string, b?: number }) { let { a, b = 1001 } = wholeObject; }也可以應用到 function 上,我覺得這個例子比較清楚,可以應用在只取物件的某幾個屬性來使用時:
function f({ a, b } = { a: "", b: 0 }): void { // ... } f(); // ok, default to { a: "", b: 0 }Spread 算是陣列相加的一個 syntax sugar,可以把 first, second 塞到 bothPlus 這陣列裡去:
let first = [1, 2]; let second = [3, 4]; let bothPlus = [0, ...first, ...second, 5];也可以應用在 object 上,目前想到可以用來做 object proxy 或是 composite 之類的,不過不適合也不一定。
let defaults = { food: "spicy", price: "$$", ambiance: "noisy" }; let search = { food: "rich", ...defaults };
沒有留言:
張貼留言