千分位與 $ 符號
function (num) { const n = Number(num); return `$${n.toFixed(0).replace(/./g, (c, i, a) => { const currency = (i && c !== '.' && ((a.length - i) % 3 === 0) ? `, ${c}`.replace(/\s/g, '') : c); return currency; })}`; }
Number(num)
因為我自己在上傳檔案時,有些部分沒有填入價格,意外發現如果沒有填入價格的話,頁面會很乾脆地顯示 $NaN 給你看。想想,這也是理所當然的,畢竟那個欄位真的就是沒有數字。
傳進的值是什麼?
一開始,我以為沒有填入價格的話,傳入的值會是空字串。測時一下,把空字串用 Number() 轉為數字,得到 0 。(這邊又是另一個意外,竟然是 0)。調整程式碼之後,發現還是不行。 最後,用 console.log 查看 num 發現,原來沒有價格的狀態下,傳進來的值是 undefined。
最後的處理方式
最後我是用 isNaN 做 if else 的過濾。
這樣就 ok 了。
const n = Number(num); if (isNaN(n)) { return num; //無價格時的處理 } else { return `$${n.toFixed(0).replace(/./g, (c, i, a) => { const currency = (i && c !== '.' && ((a.length - i) % 3 === 0) ? `, ${c}`.replace(/\s/g, '') : c); return currency; })}`; }
這樣就 ok 了。
*
0 意見