iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
Modern Web

TypeScript 啟動!系列 第 21

[Day 21] TypeScript 常見錯誤 II

  • 分享至 

  • xImage
  •  
  1. 物件和陣列的相等性:

    const obj1 = {};
    const obj2 = obj1;
    console.log(obj1 === obj2);  // true
    console.log({} === {});      // false
    

    解釋:即使 arr1arr2 看起來都是空的陣列,它們在記憶體中指向不同的位置,所以它們不相等。

  2. 浮點數的特殊情況:

    console.log(0.1 + 0.2 === 0.3); // false
    
    

    解釋:由於浮點數的運算誤差,0.1 + 0.2 的結果並不完全等於 0.3

  3. NaN 的特性:

    console.log(NaN === NaN); // false
    
    

    解釋:根據 IEEE 標準,NaN 不等於任何值,包括其本身。

  4. 隱式類型轉換:

    console.log([] + []); // ""
    console.log([] + {}); // "[object Object]"
    console.log({} + []); // 0
    
    

    解釋:JavaScript 會嘗試將運算元轉換為合適的類型來執行操作,這可以導致一些意想不到的結果。

  5. 真值轉換:

    console.log(!![]); // true
    console.log(!!{}); // true
    console.log(!!"false"); // true
    
    

    解釋:即使某些值在其他語言中可能被視為假值(falsy),但在 JavaScript 中它們會被轉換為 真值(truthy)。

  6. nullundefined 的比較:

    console.log(null == undefined); // true
    console.log(null === undefined); // false
    
    

    解釋:使用 == 時,nullundefined 被認為是相等的,但使用嚴格相等 === 時,它們是不相等的。

  7. 一個數字與一個字串相加:

    console.log(4 + "7"); // "47"
    console.log(4 * "7"); // 28
    
    

    解釋:當使用 + 運算子時,如果一個運算元是字串,那麼另一個運算元會被轉換為字串。但其他算數運算子會嘗試將字串轉換為數字。

  8. 數值字串與布林值的運算:

    console.log('5' - true); // 4
    
    

    解釋:在這種情況下,字串 '5' 和布林值 true 都被轉換為數字進行運算。

  9. 對象的奇怪行為:

    const obj = {};
    obj[true] = "true";
    obj[false] = "false";
    console.log(obj[1]); // "true"
    console.log(obj['true']); // "true"
    
    

    解釋:當使用非字串作為物件的鍵時,它會被轉換為字串。

  10. 一個數字前的加號:

    console.log(+'3'); // 3
    
    

    解釋:前面的 + 是一種簡潔的方法來將字串轉換為數字。

每當我開始撰寫 JavaScript 的深海中,總會感到自己的渺小,畢竟每次撰寫都會發現意想不到和難以解釋的現象,這種神奇的現象有時候是令人驚喜的,但更多的時候是挫敗與疑惑居多。從 [] + [] = “” 開始,我總覺得 JavaScript 的內部系統總會有意的領我們前往一片未知的領域。

然而,就在我快被這些混沌的規則給一巴掌打死的時候, TypeScript 的出現,它如同救生員一樣,把我拯救出來。全靠著 TypeScript 最強大的類型檢查系統,如同救生圈一樣,適時的解救我。在寫專案的過程中就能發現淺伏期的問題,不必等到程式運行時候才發現。

結論:不可不用的 TypeScript :)


上一篇
[Day 20] TypeScript 常見錯誤
下一篇
[Day 22] TypeScript tsconfig.json 常見設定
系列文
TypeScript 啟動!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言