Airbnb公司版JavaScript 風格指南/編碼規範

我弄得xmind的更加的清晰全面,還有很多備註,想要思維導圖的直接評論發郵鞋就好,我會發給你。


  • 基本類型:當你訪問基本類型時,你是直接對它的值進行操作。
    • string
    • number
    • boolean
    • null
    • undefined
  • object
  • array
  • function

對象

  • 使用字面量語法來創建對象
  • 不要使用保留字作爲「鍵值」,因爲在IE8不能運行。More info
  • 使用容易理解的同義詞來替代保留字
  • 數組

  • 使用字面量語法來創建數組
  • 如果你不知道數組長度,數組添加成員使用push方法。
  • 當你需要複製一個數組時,使用數組的slice方法。jsPerf
  • 當你需要把「類似數組對象」轉爲數組時,使用數組的slice方法。
  • 字符串

  • 字符串使用單引號‘’
  • 大於80個元素的字符串需要通過分隔符進行多行操作。
  • 注意:如果在長字符串中過度使用分隔符會影響性能。. jsPerf & Discussion
  • 通過編程的方式創建字符串,應該使用數組的join方法,而不是字符串鏈接方法。特別是對於IE而言。 jsPerf.
  • 函數

  • 函數表達式
  • 不要直接在非函數塊(if,while等)裏聲明一個函數,最好將函數賦值給一個變量。雖然瀏覽器允許你在非函數塊中聲明函數,但是由於不同的瀏覽器對Javascript的解析方式不同,這樣做就很可能造成麻煩。
  • 注意:ECMA-262 將塊定義爲一組語句,而函數聲明不是語句。Read ECMA-262′s note on this issue
  • 不要將參數命名爲arguments,它將在每個函數的作用範圍內優先於arguments對象。
  • 屬性

  • 使用點符號 . 來訪問屬性
  • 當你在變量中訪問屬性時,使用[ ]符號
  • 變量

  • 使用var來聲明變量,否則將聲明全局變量,我們需要儘量避免污染全局命名空間,Captain Planet這樣警告過我們。
  • 多個變量時只使用一個var聲明,每個變量佔一新行。
  • 最後再聲明未賦值的變量,這對你之後需要依賴之前變量的變量賦值會有幫助。
  • 在範圍內將變量賦值置頂,這有助於避免變量聲明和賦值提升相關的問題
  • 提升

  • 變量聲明在範圍內提升,但賦值並沒有提升
  • 匿名函數表達式提升變量名,但函數賦值並沒有提升,
  • 命名函數表達式提升變量名,但函數名字和函數體並沒有提升。
  • 函數聲明能提升他們的函數名和函數體
  • 更多的信息在JavaScript Scoping & Hoisting by Ben Cherry

 

  • 條件表達式和相等

  • 條件表達式強制使用 ToBoolean方法進行解析,並遵從以下簡單的規則Object :返回 true
  • Undefined: 返回 false
  • Null: 返回 false
  • Booleans :返回 boolean的值
  • Numbers :如果是+0, -0, or NaN返回 false, 其他則 true
  • Strings :空字符串''返回 false 其他返回true
  • 使用簡易方式
  • 更多的信息查看 Truth Equality and JavaScript by Angus Croll

  • 在多行塊中使用大括號

註釋

  • 多行註釋使用 /** ... */ ,包括描述,指定類型、所有參數的值和返回值
  • 單行註釋使用 //, 在註釋的內容前另起一行進行單行註釋,並在註釋前留一空行。
  • 在你的註釋加上FIXME或TODO的前綴可以幫助其他開發者迅速理解你指出的問題和需要的幫助,以及你建議需要完善的解決問題,這跟常規註釋不一樣因爲其具有可行動性,FIXME——是需要解決的而TODO——是需要完善的
  • 使用// FIXME: 來標記問題
  • 使用 // TODO:給待解決問題進行標註
  • 空格

  • 使用tabs設置兩個空格
  • 分支前面空一格
  • 操作符前後空一格
  • 文件末尾用換行符結束
  • 使用長方法鏈時使用縮進
  • 逗號

  • 不要在句首使用逗號
  • 不要使用多餘的逗號,這在IE6/7 和 IE9的混雜模式中會造成問題,同樣,在ES3中有些實現,如果使用多餘的逗號將增加數組的長度,這在ES5中有闡明(source):
  • 分號

  • 轉型&強制

  • 在語句的開頭執行強制轉型。
  • Strings:
  • 使用parseIntNumbers型進行強制轉型。
  • 如果出於某種原因你需要做些特別的事,而parseInt是你的瓶頸,出於性能考慮你需要使用位移,那麼留下你的註釋來解釋原因。
  • 注意:小心位移操作符,Numbers代表着64位的值,而位移操作符只能返回32位的整型,位移對於大於32位的整型的值會有不好的影響,32位最大的有符號整型是2,147,483,647。
  • (有關討論:Discussion
  • Booleans:
  • 命名規則

  • 不要使用一個字母命名,而應該用單詞描述
  • 使用駝峯法來給對象、函數、實例命名。
  • 使用駝峯式大小寫給構造函數和類命名。
  • 使用下劃線前綴_來命名私有屬性。
  • 儲存this的引用使用_this
  • 給你的函數命名,這有助於堆棧重寫
  • 注意:IE8以下還有一些關於命名函數表達式的怪癖。詳情見http://kangax.github.io/nfe/

 

  • 訪問器

  • 如果你創建訪問函數使用getVal() 和 setVal(‘hello’)

如果這個屬性是boolean,使用isVal() 或者 hasVal()

 

.也可以使用get() 和 set()函數來創建,但是必須一致。

    • 構造器

    • 給原型對象添加方法,相比用新對象重寫原型,重寫原型會有繼承問題。如果你要重寫原型方法,請重寫基礎方法。
    • 方法返回this有助於方法鏈
相關文章
相關標籤/搜索