2017年5月11日 星期四

Component architecture recipes for Angular’s reactive forms

Component architecture recipes for Angular’s reactive forms

GitHub

文章中的作法值得深入思考,另外文章中有一段 code 我覺得特別有趣:

selectTopping(topping: Topping) { const index = this.control.value.indexOf(topping); if (!!~index) { this.removeTopping(index); } else { this.addTopping(topping); } }

!!~index ==> index 是 indexOf 的結果:

topping 存在陣列中的話 index >= 0,否則 index = -1
所以 !!~index 也可以寫成 index >= 0

後來實驗了一下:

!!~(-1) ==> false
!!~0     ==> true
!!~1     ==> true
!!~2     ==> true
發現了嗎? index = 0 時表示有找到,但 0 是 falsy 值,用 !! 轉換之後會是 false,這樣和 index > 0 時轉換後是不一致的,但是先用 ~ 處理過再用 !! 轉換之後就一致啦

參考資料:
JavaScript Bitwise

Javascript中的位元運算子 (1) - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天

沒有留言:

張貼留言