JavaScript語言精粹-毒瘤、糟粕(應對)
阿新 • • 發佈:2018-11-11
毒瘤
- 不使用全域性變數
- 使用塊級作用域,不var
- return與返回值要位於同一行,否則當自動插入分號後會返回undefined
- 當物件的屬性名與js保留字相同時,無法使用點語法,使用括號表示法
- js字元是16位的,Unicode將一對字元視為一個單一的字元,而js將其認為是兩個不同的字元
- 注意typeof對於null和正則返回'object'
- parseInt在遇到非數字時會停止,注意parseInt('16')和parseInt('16 jk')均返回16
- +運算子會根據引數來判斷是數值計算還是字串拼接
- NaN不是數字並且它不等於自身,typeof對於其返回'number',判斷值是否為數值型別可用typeof value === 'number' && isFinite(value)
- js的陣列是偽陣列,不需設定維度、不會越界,但效能不如真正的陣列,typeof不能區別陣列與物件,可用instanceof區別
- js的假值:0、NaN、''、false、null、undefined
- hasOwnProperty是一個function而不是運算子,不會查詢原型鏈上的屬性,可以被替換,不要使用obj.hasOwnProperty=null之類
- js的預設物件不是空物件,當原型鏈可能對我們產生影響時,使用Object.create(null)建立純淨的物件
糟粕
- 不使用==,而是===;不使用!=,而是!==
- 不使用with語句
- 不使用eval語句
- 適當地使用continue語句能提高可讀性,但效能不如重構去除continue的程式碼
- swith中的每個case下注意break,小心穿越到下個case
- if語句可以接受單行語句,但此時還是應加上花括號
- ++、--不夠嚴謹,使得程式碼過於擁擠,不使用的話程式碼可以變的更整潔
- 使用位操作符(& | ^ ~ >> >>> <<)要小心點,&容易誤寫為&&
- function語句定義的函式存在宣告提升,使用函式表示式或IIFE替代之
- 不要使用型別的包裝物件,形如new Boolean()、new Number()、new String(),另外也應避免使用new Object()、new Array(),使用{}、[]代替
- new運算子後跟的函式應以首字母大寫的形式命名
- js中的void是一個運算子,接受一個運算數並始終返回undefined,沒有作用,應避免使用
歡迎關注、點贊