Change delay while timer is running

使用 setInterval() 時,如果要更新 delay,原本我會先透過 clearInterval() 清除原本的之後再重建一個新的:

var delay = 3000
var muda = () => console.log('無駄')
var myInterval = setInterval(muda, delay)

// change the period of '無駄'
delay = 500
clearInterval(myInterval)
myInterval = setInterval(muda, delay)

說實在賊麻煩,而且我的情境是希望前一個循環能夠先跑完,下一個循環才反應新的 delay,但上面的做法會讓前一個循環被中斷,這母湯。

後來估了一下,發現可以改用 setTimeout() 來實作:

var delay = 3000

var muda = () => {
  console.log('無駄')
  setTimeout(muda, delay)
}

setTimeout(muda, delay)

// change the period of '無駄'
delay = 500

在要更新 delay 的時候直接給新的值就好。

Pointer media query

Pointer media query 用來檢查瀏覽裝置是否有精確的pointer,例如滑鼠、手機觸控螢幕。

三種設定值可以使用:

  • none: 裝置沒有 pointing device
  • coarse: 裝置有精準度有限的 pointing device
  • fine: 裝置有高精準度的 pointing device
unshift
var array = [1, 2, 3, 4];

console.log(array.unshift(5, 6));
// 6
// array length after prepend elements

console.log(array)
// [5, 6, 1, 2, 3, 4]
強制 Chrome 瀏覽器更新 favicon

在某次更新專案的 favicon.ico 時候,發現不管是在設定清除了快取,cmd+shift+R,或是用無痕視窗開啟,在分頁上看到的都是舊的圖示。但是透過網址直接存取 favicon.ico,拿到也的確是新的檔案。

後來上網餵狗發現可以透過手動刪除位於User Data資料夾下的 Favicon cache file 以徹底清除所有的 favicon 快取來解決此問題。

mixed, any and asterisk

asterisk(*) vs any

  • Use *:
const foo: () => Array<*> = () => [777];

// Flow error:
// 13: const foo: () => Array<*> = () => [777];
//                                        ^ number. This type is incompatible with
// 15: (foo(): Array<string>);
//                   ^ string
(foo(): Array<string>);

// No flow errors.
(foo(): Array<number>);
  • Use any:
const bar: () => Array<any> = () => [777];

// No flow errors.
(bar(): Array<string>);

// No flow errors.
(bar(): Array<number>);

用了any基本上跟不檢查沒兩樣,甚至有可能污染到其他值。所以能不用就盡量不用。

關於any

mixed vs asterisk(*)

  • Use mixed:
// Flow error:
// 1: const add5: (mixed) => number = a => a + 5;
//                                         ^ mixed. This type cannot be used in an addition because it is unknown whether it behaves like a string or a number.
const add5: mixed => number = value => value + 5;

此錯誤訊息產生的原因官方文件記載如下:

When you try to use a value of a mixed type you must first figure out what the actual type is.

© 2019 Hau Chen