2022年12月26日 星期一

關於 Number.toFixed()

 關於 Number.toFixed()

前言

  最近發現 JavaScript 可以透過 Number.toFixed() 來取得精度修正後的字串,在此把學習的過程做個紀錄。


內容

  範例如下

const numObj = 12345.6489;
console.log( Math.round(numObj * 10) / 10  );//12345.6
console.log( numObj.toFixed(1) );//"12345.6"
console.log( numObj.toFixed(2) );//"12345.65"
console.log( numObj.toFixed(8) );//"12345.64890000"
console.log( Number.parseFloat( numObj.toFixed(2) ) );//12345.65


範例開頭示範用 Math.round() 來完成精度修正,也是我一直以來用的方法,接著用 Number.toFixed() 來修正精度,引數代表的是修正精度的位數,範例第三次使用 Number.toFixed() 使用時會用超出位數的方式來修正,會發現結果是把多餘的位數補零,最後要注意 Number.toFixed() 回傳的是字串,而不是 Number ,如果要得到 Number 的結果就要再透過 Number.parseFloat() 來取得。


參考資料

[ developer.mozilla.org ] Number.prototype.toFixed()

2022年12月19日 星期一

關於 String.charCodeAt()

 關於 String.charCodeAt()

前言

  JavaScript 有辦法直接取得 unicode 的數值嗎?答案是可行的,透過 String.charCodeAt() 即可,在此把學習的過程做個紀錄。


內容

  範例如下

function getUniCodeString( code ){
  return code.toString(16).padStart( 4,'0');
}
let str = "許功ABC";
console.log( getUniCodeString(str.charCodeAt(0) ) );//8a31
console.log( getUniCodeString(str.charCodeAt(1) ) );//529f
console.log( getUniCodeString(str.charCodeAt(2) ) );//0041


範例的開始有個 getUniCodeString() ,作用是把 unicode 的數字轉乘 16 進制的字串,接著就可以透過 charCodeAt() ,來取得 unicode ,引數識字元的索引,可以看到範例是範例分別對開頭的 3 個字元進行取得。 getUniCodeString() 的最後會透過 String.padStart() 強制把顯示的位數補正成 4 ,這樣可以方便做查詢。


參考資料

[ developer.mozilla.org ] String.prototype.charCodeAt()

2022年12月12日 星期一

關於 String.padStart() 與 String.padEnd()

 關於 String.padStart() 與 String.padEnd()

前言

  最近發現 String.padStart() 與 String.padEnd() ,抽個空作個學習,在此做個紀錄。


內容

  String.padStart() 與 String.padEnd() 的功能都是填充字串,一個填充在字首,另一個則在字尾,範例如下

const str1 = '5';

console.log(str1.padStart(1, '01'));//5
console.log(str1.padStart(2, '01'));//05
console.log(str1.padStart(3, '01'));//015
console.log(str1.padStart(6, '01'));//010105
//
console.log(str1.padEnd(1, '01'));//5
console.log(str1.padEnd(2, '01'));//50
console.log(str1.padEnd(3, '01'));//501
console.log(str1.padEnd(6, '01'));//501010


這兩個 Function 的參數都是兩個,第一個是"目標字串長度",第二個則是要填充的字串,範例的第一個都是字串長度"1",而原本字串的長度也是"1",所以不會填充任何字串,接著把"目標字串長度"變成"2"會如何?以 String.padStart()  來說會得到"05",開頭的"0",其實是要填充的字串的第一個字元,接著長度調成"3",就會得到"015",就剛好是要填充的字串加原本的字串,最後把長度調成"6"會怎麼樣呢?會得到"010105",會看到要填充的字串開始重複, String.padEnd() 的行為與 String.padStart() 一樣,只是將字串填到字尾而已。


參考資料

[ developer.mozilla.org ] String.prototype.padStart()

[ developer.mozilla.org ] String.prototype.padEnd()

2022年12月5日 星期一

關於 String.endsWith()

 關於 String.endsWith()

前言

  最近發現 String.endsWith() ,抽個空做個學習,在此做個紀錄。


內容

  範例如下

const str1 = 'Hello world';

console.log(str1.endsWith('world'));//true
//
const str2 = 'How are you?';
console.log(str2.endsWith('you'));//false
console.log(str2.endsWith('you',str2.length - 1));//true
//check end of string use regex
const reg = /you[?]$/g;
console.log( reg.test(str2) );//true


String.endsWith() 的功能就是檢查字串結尾有否是某個指定字串,範例的第一次應用直接檢查字串的結尾是否是 'world',然後他有第二個參數可以輸入,第二個參數是個很不直覺的參數,意思是要檢查的字串長度,如果不輸入時,可以直接想像就是輸入 String.length ,就像第二次應用的開頭一樣,結果會得到 false 是因為結尾應該是有 '?' 的,所以接著透過第二個參數來少檢查一個字元就可以得到 true ,最後範例透過正則表達式來檢查結尾。這個 function 其實可以被正則表達式完全替代,但前提是要先習慣用正則表達式。


參考資料

[ developer.mozilla.org ] String.prototype.endsWith()