
在這裡整理一下,每條對應的提示 第1條:了解使用的js版本 第2條:了解JavaScript的浮點數 第3條:當心隐式的強制轉換 第4條:原始類型優于封閉對象 第5條:避免對混合類型使用==運算符 第6條:了解分号插入的局限 第7條:視字元串為16位的代碼單元序列
在這裡整理一下,每條對應的提示
第1條:了解使用的js版本
- 确定應用程式支援的js的版本(浏覽器也是應用程式噢)
- 確定使用的js特性是應用程式支援的(要不寫了也運作不了)
- 總是在嚴格模式下編寫和測試代碼(面向未來程式設計)
- 合并代碼時注意不同聲明的嚴格模式(還是用第二種解決方案吧,省心)
第2條:了解JavaScript的浮點數
- js的數字都是雙精度的浮點數
- js的整數僅僅是雙精度浮點數的一個子集,不是單獨的一個類型
- 位運算将數字視為32位的有符号整數
- 當心浮點運算的精度問題
第3條:當心隐式的強制轉換
- 類型錯誤會被隐式的強制轉換隐藏
- 運算符+是進行加法運算還是字元串連接配接操作取決于參數類型。
- valueOf強制轉換為數字,toString強制轉換為字元串
- 實作valueOf方法的對象,應該實作一個toString方法傳回valueOf方法傳回值的字元串表示
- 測試一個值是否未定義,應該使用typeof或者直接與undefined比較,不應該使用真值運算
第4條:原始類型優于封閉對象
- 當做相等比較時,原始類型的封裝對象與其原始值行為不一樣。原始值一定等于原始值,封裝對象不等于相同的值的封裝對象。“mm”==”mm” ; new String(“mm”) != new String(“mm”)
- 擷取和設定原始類型的屬性會隐式地建立封裝對象。每次都會建立一個新的封裝對象,是以設定的值不會保留。
第5條:避免對混合類型使用==運算符
- 當參數類型不同時,==運算符應用了一套難以了解的隐式強制轉換規則。
- 使用===運算符,可以避免記住那些強制轉換規則,使代碼更清晰。
- 當比較不同類型的值時,最好顯式地進行強制轉換,使程式行為更清晰。
第6條:了解分号插入的局限
- 僅在“}”标記之前、一行的結束和程式的結束處自動插入分号
- 僅在緊接着的标記不能被解析的時候插入分号
- 在以(、[、+、-、/字元開頭的語句前絕不能省略分号
- 當腳本檔案進行連接配接時,在腳本開頭加上防禦性的分号
- 在return、throw、 break 、continue、 ++、 --的參數之前絕不能換行
- 分号不能作為for循環的頭部或空語句的分隔符而自動插入
第7條:視字元串為16位的代碼單元序列
- js字元串是由16位的代碼單元組成,而不是由Unicode代碼點組成。
- js使用兩個代碼單元表示216及其以上的Unicode代碼點。這兩個代碼單元被稱為代理對。
- 代理對甩開了字元串元素計數,length,charAt,charCodeAt方法及正規表達式模式受到了影響。
- 使用第三方的庫編寫可識别代碼點的字元串操作。
- 每當使用一個含有字元串操作的庫時,都需要查閱該庫文檔,看好像處理代碼點的整個範圍。
版權聲明
翻譯的文章,版權歸原作者所有,隻用于交流與學習的目的。
原創文章,版權歸作者所有,非商業轉載請注明出處,并保留原文的完整連結。