天天看點

[Effective JavaScript 筆記] 第1章:讓自己習慣javascript小結

[Effective JavaScript 筆記] 第1章:讓自己習慣javascript小結

在這裡整理一下,每條對應的提示 第1條:了解使用的js版本 第2條:了解JavaScript的浮點數 第3條:當心隐式的強制轉換 第4條:原始類型優于封閉對象 第5條:避免對混合類型使用==運算符 第6條:了解分号插入的局限 第7條:視字元串為16位的代碼單元序列

在這裡整理一下,每條對應的提示

第1條:了解使用的js版本

  1. 确定應用程式支援的js的版本(浏覽器也是應用程式噢)
  2. 確定使用的js特性是應用程式支援的(要不寫了也運作不了)
  3. 總是在嚴格模式下編寫和測試代碼(面向未來程式設計)
  4. 合并代碼時注意不同聲明的嚴格模式(還是用第二種解決方案吧,省心)

第2條:了解JavaScript的浮點數

  1. js的數字都是雙精度的浮點數
  2. js的整數僅僅是雙精度浮點數的一個子集,不是單獨的一個類型
  3. 位運算将數字視為32位的有符号整數
  4. 當心浮點運算的精度問題

第3條:當心隐式的強制轉換

  1. 類型錯誤會被隐式的強制轉換隐藏
  2. 運算符+是進行加法運算還是字元串連接配接操作取決于參數類型。
  3. valueOf強制轉換為數字,toString強制轉換為字元串
  4. 實作valueOf方法的對象,應該實作一個toString方法傳回valueOf方法傳回值的字元串表示
  5. 測試一個值是否未定義,應該使用typeof或者直接與undefined比較,不應該使用真值運算

第4條:原始類型優于封閉對象

  1. 當做相等比較時,原始類型的封裝對象與其原始值行為不一樣。原始值一定等于原始值,封裝對象不等于相同的值的封裝對象。“mm”==”mm” ;   new String(“mm”) != new String(“mm”)
  2. 擷取和設定原始類型的屬性會隐式地建立封裝對象。每次都會建立一個新的封裝對象,是以設定的值不會保留。

第5條:避免對混合類型使用==運算符

  1. 當參數類型不同時,==運算符應用了一套難以了解的隐式強制轉換規則。
  2. 使用===運算符,可以避免記住那些強制轉換規則,使代碼更清晰。
  3. 當比較不同類型的值時,最好顯式地進行強制轉換,使程式行為更清晰。

第6條:了解分号插入的局限

  1. 僅在“}”标記之前、一行的結束和程式的結束處自動插入分号
  2. 僅在緊接着的标記不能被解析的時候插入分号
  3. 在以(、[、+、-、/字元開頭的語句前絕不能省略分号
  4. 當腳本檔案進行連接配接時,在腳本開頭加上防禦性的分号
  5. 在return、throw、 break 、continue、 ++、 --的參數之前絕不能換行
  6. 分号不能作為for循環的頭部或空語句的分隔符而自動插入

第7條:視字元串為16位的代碼單元序列

  1. js字元串是由16位的代碼單元組成,而不是由Unicode代碼點組成。
  2. js使用兩個代碼單元表示216及其以上的Unicode代碼點。這兩個代碼單元被稱為代理對。
  3. 代理對甩開了字元串元素計數,length,charAt,charCodeAt方法及正規表達式模式受到了影響。
  4. 使用第三方的庫編寫可識别代碼點的字元串操作。
  5. 每當使用一個含有字元串操作的庫時,都需要查閱該庫文檔,看好像處理代碼點的整個範圍。

版權聲明

翻譯的文章,版權歸原作者所有,隻用于交流與學習的目的。

原創文章,版權歸作者所有,非商業轉載請注明出處,并保留原文的完整連結。

繼續閱讀