2025年8月25日 星期一

關於 Unary negation (-)

關於  Unary negation (-)

前言

  在變數前加一個負號,也就是 [ developer.mozilla.org ] Unary negation (-) ,直覺得會覺得是把變數變成負值,但有一些跟寫得不一樣,在此把學習的過程做個紀錄。


內容

   [ developer.mozilla.org ] Unary negation (-)  的功能確實是把變數變成數值,範例如下

let num = -4;
console.log( -num );//4
console.log( -"123" );//-123
console.log( -"-456" );//456
console.log( -"ABC" );//NaN


範例開頭對 Number 使用,沒問題跟預期一樣,但其實

[ developer.mozilla.org ] Unary negation (-) 不只是對 Number 有效,也對 String 有效,如果 String 本身可以被 Pasre 成 Number,那不論是是正值或負值都會成功轉換,但如果不能被 Parser ,會回傳 NaN 。


參考資料

[ developer.mozilla.org ] Unary negation (-)

2025年8月18日 星期一

直接喚起宣告的匿名函式

 直接喚起宣告的匿名函式

前言

  最近看到 [ developer.mozilla.org ] void operator ,發現遽然可以直接喚起宣告的匿名的函式,在此把學習的過程做個紀錄。


內容

  範例如下

void function (){
  console.log('exe!');//exe!
}();
//follow will has error!
// function (){
//   console.log('exe!');
// }();


一班匿名函式宣告後會用變數來承接,以便於喚起,但只要透過 [ developer.mozilla.org ] void operator 後就可以直接喚起,不需要變數承接,用法也很簡單,在匿名函式前加入 void ,接著在宣告後的地方增加 () ,如果也需要輸入引數可在這個 () 裡增加,如此就可以喚起該匿名函式!如果不透過在前方加 void 的方式,直接在後方加 () 喚起是不可行的!


參考資料

[ developer.mozilla.org ] void operator

2025年8月11日 星期一

將數字(Number)強制顯示成 32 位元

 將數字(Number)強制顯示成 32 位元

前言

  最近需要把數字(Number)顯示成 32 位元,但發現只是透過進制轉換並不會顯示成 32 位元,它會依據數值大小來決定位元數,如果需要強制顯示成 32 位元該如何做呢?在此把學習的過程做個紀錄。


內容

  範例如下

let num = 5;
let negNum = -5;
console.log( num.toString(2) );//101
console.log( negNum.toString(2) );//-101
console.log( (num >>> 0).toString(2) );//101
console.log( (negNum >>> 0).toString(2) );//11111111111111111111111111111011
//
function ParseNumberToBinary32(num){
  let str = (num >>> 0).toString(2);
  return str.padStart( 32 , '0' );
}
console.log( ParseNumberToBinary32(num) );//00000000000000000000000000000101
console.log( ParseNumberToBinary32(negNum) );11111111111111111111111111111011


範例的前兩例示範只是透過進制轉換時顯示的結果,負數的顯示結果是詭異的負號加二進制數值,該如何正常顯示呢?透過 [ developer.mozilla.org ] Unsigned right shift (>>>) ,利用 >>> 位移 0 來取得結果,第三與第四例即結果,雖然負數顯示的結果正常了,但正數的位元數不足,富麗的最後透過 ParseNumberToBinary32() 來取得結果,可以已看到 ParseNumberToBinary32() 也是透過 >>> 位移 0 來處理,但最後會使用 padStrart() 來輸出,這是為了補足在數值是正數時會位元不足。

 

參考資料

[ developer.mozilla.org ] Unsigned right shift (>>>)


相關文章與資料

關於 JavaScript 的進制轉換


2025年8月4日 星期一

關於指數運算子(**)

 關於指數運算子(**)

前言

  JavaScript 提供指數運算子(**),他其實跟早前的 Math.pow() 的功能差不多,但有一些不一樣,在此把學習的過程做個紀錄。


內容

  範例如下

console.log( 2 ** 9 );//512
console.log( 10 ** -3 );//0.001
console.log( Math.pow( 2 , 8 ) );//256
console.log( Math.pow( 10 , -2 ) );//0.01
//
let bigNum = 2n;
console.log( (bigNum ** 10n).toString() );//1024
//Follow has error...
//console.log( (bigNum ** 10n).toString() );
//console.log( (2 ** 10n).toString() );


指數運算子(**)跟一班的運算子用起來一樣,可以在指數運算時提供直觀的程式碼,使用 Math.pow() 也不是不行只是程式碼看起來不簡潔而已。指數運算子(**)有一個不同是可以支援BigInt,Math.pow()並不支援,還有要注意用於 BigInt 時前與後的變數都必須是 BigInt。


參考資料

[ developer.mozilla.org ] 指數運算子(**)

[ developer.mozilla.org ] BigInt


相關文章與資料

關於 JavaScript 的進制轉換

關於 BigInt 轉換非十進制的作法

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

關於 BigInt