2023年1月29日 星期日

利用 Object.entries() 來瀏覽物件

 利用 Object.entries() 來瀏覽物件

前言

  最近在瀏覽物件時發現遽然忘記要如何瀏覽,仔此把學習的過程做個紀錄。


內容

  範例如下

const object1 = {
  a: 'string',
  b: 1234
};
//
for (const [key, value] of Object.entries(object1)) {
  console.log(`${key}: ${value}`);
}
//"a: string"
//"b: 1234"
//
console.log( Object.keys(object1) );//["a", "b"]
console.log( Object.values(object1) );//["string", 1234]


透過 Object.entries() 再搭配 of 語法就可以瀏覽物件,如果只需要名稱,可以透過 Object.keys(),如果只需要數值就用 Object.values()。


參考資料

[ developer.mozilla.org ] Object.entries()

2023年1月23日 星期一

關於 String.trim()

 關於 String.trim() 

前言

  最近在 ECMAScript 2019 標準發現 JavaScript 支援 trim() ,抽個空做個學習,在此做個紀錄。


內容

  範例如下

const str = ' \n\t  Hello world!   ';

console.log( str );
//" 
//    Hello world!   "
console.log( str.trimStart() );
//"Hello world!   "
console.log( str.trimEnd() );
//" 
//    Hello world!"
console.log( str.trim() );
//"Hello world!"


JavaSctript 不只支援 trim() ,同時支援 trimStart() 與 trimEnd() ,目的都是去除"空白字元",但所謂的空白字元並不是只有空白,包含換行字元與 tab 字元也都會被去除,但一般的標點符號都不會被去除,這次看 MDN 的說明發現 trimStart() 可以用 trimLeft() 來替代,而 trimEnd() 可以用 trimRight() 來替代,其實只是名稱不同而已,功能是一樣的。


參考資料

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

2023年1月16日 星期一

關於 BigInt 搭配運算子時的注意事項

 關於 BigInt 搭配運算子時的注意事項

前言

  在先前的 關於 BigInt 裡基本使用了 BigInt ,最近發現它可以搭配運算子來使用,在此把學習的過程做個紀錄。


內容

  範例如下

console.log( (10n + 3n).toString() );//13
console.log( (10n - 3n).toString() );//7
console.log( (10n * 3n).toString() );//30
console.log( (10n / 3n).toString() );//3
//It can't operator with Number
//console.log( (10n / 3).toString() );//Thtis has error!
//
//This equal 10n.toString() + '3'
console.log( 10n + '3' );//103
console.log( '3' + 10n );//310


範例的開頭對 BigInt 進行了加減乘除,結果如預期,要注意除法會只取整數,畢竟 BigInt 不支援小數,不幸的搭配 Number 來使用是不支援的,搭配 String 來使用時並不是運算的加法,而是將字串串接在一起,注意到範例在運算完後都不需要 toString() ,因為加法完成後的型別一定是 String ,不論加法的順序,這點要注意。


參考資料

[ developer.mozilla.org ] BigInt


相關文章與資料

關於 BigInt

2023年1月9日 星期一

關於 BigInt

 關於 BigInt

前言

  最近發現 BigInt 這個型別,抽個空做個學習,在此做個紀錄。


內容

  BigInt 是 JavaScript 用來支援位數很多的整數的方案,它比 Number 還要能處理更多的整數,但不能處理小數,範例如下

console.log(Number.MIN_SAFE_INTEGER); // -9007199254740991
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
//
let num = 1234567890123456789 * 123;
let bigNum = 1234567890123456789n * 123n;
console.log(  num );//151851850485185200000
console.log(  Number.isFinite(num) );
console.log(  bigNum.toString() );//"151851850485185185047"


範例開頭先印出了 Number 的最大整數與負最大整數,接著用 Number 與 BigInt 來示範超出 Number 最大後會發生什麼事,如果要將一串數字轉成  BigInt 的話只要在數字的最後加上"n"就會變成 BigInt , Number 雖然可以正常印出數值,但其實數值是錯的!利用 Number.isFinite() 來檢查發現不會變成"false",所以 JavaScript 並不會在超出最大述職時直接變成無限大,最後 BigInt 並不能直接做列印,要透過 BigInt.toString() 才能列印數值,這點要注意。


參考資料

[ developer.mozilla.org ] BigInt


相關文章與資料

關於 Number.isFinite()

2023年1月2日 星期一

關於 Number.isFinite()

 關於 Number.isFinite()

前言

  最近發現在做除法時發現 JavaScript 的行為跟我想得不太一樣,在此把學習的過程做個紀錄。


內容

  由於我是先學 C++ ,所以理所當然地認為"除零"是絕對不可以做的事,不然程式直接中斷,但最近發現 JavaScript 在"除零"遽然不會發生任何中斷,也不會報任何的錯誤,來看以下範例

console.log( 1 / 0 );//Infinity
console.log( Infinity );//Infinity
console.log( 0 / 0 );//NaN
console.log( Number.isFinite(1 / 0) );//false


範例開頭做出一個"除零"的動作,結果會顯示"Infinity",查了一下發現"Infinity"是 JavaScript 預設的參數,最意外的行為是第 3 個 ,零除零並不會得到 "Infinity" ,而是"NaN",最後如果要判斷是否超出值域可以使用 Number.isFinite() 。


參考資料

[ developer.mozilla.org ] Number.isFinite()