2026年7月27日 星期一

關於 Math.sumPrecise()

 關於 Math.sumPrecise()

前言

  Math.sumPrecise() 看說明是為了解決連續加浮點數造成的誤差問題,但實際用起來似乎有些問題,在此把學習的過程做個紀錄。


內容

  範例如下

console.log( Math.sumPrecise( [0.1, 0.2] ) );//0.30000000000000004
console.log( Math.sumPrecise( [0.1, 0.2, 0.3] ) );//0.6
console.log( Math.sumPrecise( [0.1, 0.2, 0.3, 0.4 ] ) );//1.0
//
let ar1 = [0.1, 0.2];
let ar2 = [0.1, 0.2, 0.3];
let ar3 = [0.1, 0.2, 0.3, 0.4];
console.log( ar1.reduce((a, b) => a + b, 0) );0.30000000000000004
console.log( ar2.reduce((a, b) => a + b, 0) );0.6000000000000001
console.log( ar3.reduce((a, b) => a + b, 0) );1


Math.sumPrecise() 的用法很簡單,引數只支援輸入一個陣列,並不支援多個引數的輸入,透過回傳值取得加完後的結果,範例分別示範了三種狀況,但在第一個狀況就發生有精度的問題!而且這個狀況是符合規格的,在 [ developer.mozilla.org ] Math.sumPrecise() 有說這是合理的結果,所以使用 Math.sumPrecise() 還是有精度的問題要解決,算是只解決一半,最後範例分別把三種狀況使用直接加的方式呈現,可以跟開始的三個示範做比較。


  感覺 Math.sumPrecise() 並不可靠,問題只解決一半,也許日後的版本會解決這個問題,現在還是不建議使用。


參考資料

[ developer.mozilla.org ] Math.sumPrecise()

2026年7月20日 星期一

關於 Chrome 的首頁綁架

 關於 Chrome 的首頁綁架

前言

  最近 Chrome 被首頁綁架了!不知是不是上次 關於 Daemon tool lite 無法解除安裝的問題 的後遺症,在此把解決的過程做個紀錄。


內容

  最近發現在 Chrome 的網址列檔非網址的內容,都會被強制轉到 Yahoo 搜尋,用其它瀏覽器搜尋解大概找到了把 Chrome 還原設定,操作如下圖

Chrome 還原設定 

本想這樣操作就可以結束綁架,但結果是不行!


  接著看以下影片教學


移除首頁綁架教學


裡面的重點是要刪除暫存資料夾的資料,可以用參考下圖

打開暫存資料夾


打開後刪除全部的資料,刪完後還在再次把 Chrome 還原設定,結果就結束 Chrome 的綁架。


  Chrome 不知是何時被綁架的,很可能是上次的 關於 Daemon tool lite 無法解除安裝的問題 連同附帶的效果,不過我也懶得證明是不是安裝後會被綁架,因為不想再次安裝該流氓軟體。


相關文章與資料

關於 Daemon tool lite 無法解除安裝的問題

2026年7月13日 星期一

關於 Daemon tool lite 無法解除安裝的問題

 關於 Daemon tool lite 無法解除安裝的問題

前言

  最近發生 Daemon tool lite 無法解除安裝的問題,在此把解決的過程做個紀錄。


內容

  最近打開 Daemon tool lite 後會跳出要下載最新版本的視窗,該視窗附上下載安裝檔的連結,關閉該視窗程式也會整個關掉,也就是不更新到最新版本不給用,所以就很直接的下載最新版本的安裝檔,看到安裝畫面的時候是寫著 Daemon tool  ultra ,我以為是新版本的改名,沒有懷疑是不同軟體,安裝完發現只能試用 3 天,所以我就直接到官網 [ www.daemon-tools.cc ] daemon tool 下載 ,下載 Daemon tool lite 並卸載 Daemon tool  ultra ,本以為這樣就沒問題了,但安裝最新版的 Daemon tool lite 的時候會安裝另一個名為 PC App stroe 的軟體,如果不安裝不給用,所以我果斷放棄用最新版的 Daemon tool lite。

  放棄 Daemon tool lite  後,就想著卸載舊版本的 Daemon tool lite ,神奇的事發生了,透過設定->應用程式 來選定 Daemon tool lite 解除安裝遽然會跳出存取被拒請聯絡系統管理員的視窗!本以為是我的帳號不是系統管理員才跳出該視窗,所以我直接到 Daemon tool lite  安裝的資料夾用系統管理員的身份執行反安裝的執行檔,結果遽然也是跳出存取被拒請聯絡系統管理員的視窗!既然是存取被拒,所以我看了一下反安裝檔的內容->安全性的權限,發現遽然我帳號的權限都被取消了,所以我就手動加回來,加回來後再執行反安裝檔結果還是一樣。


  在經歷了上網搜尋後,找到了用命令提示字元並且以系統管理員執行,再到 Daemon tool lite  的安裝資料夾執行反安裝,結果就可以了!


  

  Daemon tool lite 如果還要免費使用就必須被強迫安裝其它軟體,如果需要替代可以使用 [ wincdemu.sysprogs.org ] WinCDEmu 下載 ,一樣是免費,而且這個不需安裝其它軟體。


參考資料

[ www.daemon-tools.cc ] daemon tool 下載

[ wincdemu.sysprogs.org ] WinCDEmu 下載

2026年7月6日 星期一

關於 Object.is()

 關於 Object.is()

前言

  Object.is() 簡短看一下說明以為就是單純檢查物件是不是同一個,如同 === ,但實際用了發現有小小的不一樣,在此把學習的過程做個紀錄。


內容

  範例如下

let obj1 = {};
let obj2 = {};
console.log( obj1 === obj2);//false
console.log( Object.is( obj1, obj2 ) );//false;
//
console.log( 0 === -0);//true
console.log( Object.is( 0 , -0) );//false


Object.is() 的功能是用來檢查物件是否為同一個,如同 === 的作用,但要注意 Object.is() 是有分 +0 與 -0 的差異,範例檢查 +0 與 -0 時用  === 的結果是 true ,但用 Object.is() 的結果卻是 false !


參考資料

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

2026年6月29日 星期一

關於 Map.getOrInsertComputed()

 關於 Map.getOrInsertComputed()

前言

  在上次的 關於 Map.getOrInsert()  介紹 Map.getOrInsert(), Map 還提供另一個類似的函式 Map.getOrInsertComputed() ,在此把學習的過程做個紀錄。


內容

  範例如下

let map = new Map();
map.set( 'A' , 1234 );
map.set( 'B' , 5678 );
//
console.log( map.getOrInsertComputed( 'C' ,  (value) => `New key ${value} is inserted.` ) );//New key C is inserted.
//
let insertCon = 0 ;
let callDefaultValue = (value) => {
  console.log(`New key ${value} is inserted.insertCon:${insertCon}`);
  return insertCon++;
};
map.getOrInsertComputed( 'D' , callDefaultValue);//New key D is inserted.insertCon:0
map.getOrInsertComputed( 'E' , callDefaultValue);//New key E is inserted.insertCon:1


Map.getOrInsert() 和 Map.getOrInsertComputed() 最大的差異是第二的引數,Map.getOrInsert() 插入的是固定值,但 Map.getOrInsertComputed() 是輸入一個函式來插入值,範例的 'C' 值直接示範如何插入,但直接使用不方便插入變數,所以範例的 'D' 與 'E' 先把函式存在變數,這樣就可以每次插入都用同一個函式,接著可以看到函式會在每次喚起後增加 indertCon,所以每次插入後顯示的 insertCon 會不一樣。


參考資料

[ developer.mozilla.org ] Map.prototype.getOrInsertComputed()


相關文章與資料

關於 Map.getOrInsert()


2026年6月22日 星期一

關於 Map.getOrInsert()

 關於 Map.getOrInsert()

前言

  最近發現 Map 本身有提供取得內容如果沒有的話就自動插入的功能,也就是 Map.getOrInsert() ,在此把學習的過程做個紀錄。


內容

  範例如下

let map = new Map();
map.set( 'A' , 1234 );
map.set( 'B' , 5678 );
//
console.log( map.get( 'A') );//1234
console.log( map.get( 'a') );//undefined
//
console.log( map.getOrInsert( 'A' , 9999) );//1234
console.log( map.getOrInsert( 'C' , 9999) );//9999
console.log( map.get( 'C') );//9999


Map.getOrInsert()  的用法只比 Map.get() 多一個引數,也就是當見直不存在要插入的的內容,範例開頭分別示範用  Map.get() 取得存在與不存在的鍵值狀況,接著就是 Map.getOrInsert() 取得已存在鍵值,結果跟 Map.get()  ,第二次就取得不存在的鍵值,由於不存在所以會被插入成一個新鍵值,內容就是第二個引數的內容,最後 Map.get() 確認新的鍵值是否有被確實的插入。

 

參考資料

[ developer.mozilla.org ] Map.prototype.getOrInsert()

2026年6月15日 星期一

關於 Array.unshift()

 關於 Array.unshift()

前言

  最近需要在陣列的開頭插入元素,發現有 Array.unshift() 可以完成,在此把學習的過程做個紀錄。


內容

  範例如下

let ar = [ 1 , 2 , 3 ];
ar.unshift( 0 );
console.log( ar );//[0, 1, 2, 3]
//
ar.unshift( -1 );
console.log( ar );//[-1, 0, 1, 2, 3]
//
ar.unshift( -4 , -3 , -2);
console.log( ar );//[-4, -3, -2, -1, 0, 1, 2, 3]


Array.unshift() 的使用很簡單,只需將要插入到開頭的元素放到引數就行,而且還支援輸入多個引數,如範例最後所示。


參考資料

[ developer.mozilla.org ] Array.prototype.unshift()