摘要:小駝峰式命名法首字母小寫。函數命名動詞含義返回值判斷是否可執行某個動作權限函數返回一個布爾值。
codereview 思考
提升代碼質量
代碼復盤
有利于規范的落地
對業務的理解加深
表達溝通能力的增強
相互學習
儀式感
前端代碼規范Airbnb 代碼規范 https://github.com/airbnb/jav...命名規則eslint 代碼檢查 https://cn.eslint.org
korofileheader 注釋生成 https://marketplace.visualstu...
凹凸實驗室代碼規范 https://guide.aotu.io/index.html
react 代碼規范 https://github.com/airbnb/jav...
vue 代碼規范 https://cn.vuejs.org/v2/style...
Pascal Case 大駝峰式命名法:首字母大寫。eg:StudentInfo、UserInfo、ProductInfo Camel Case 小駝峰式命名法:首字母小寫。eg:studentInfo、userInfo、productInfo函數命名
動詞 | 含義 | 返回值 |
---|---|---|
can | 判斷是否可執行某個動作(權限) | 函數返回一個布爾值。true:可執行;false:不可執行 |
has | 判斷是否含有某個值 | 函數返回一個布爾值。true:含有此值;false:不含有此值 |
is | 判斷是否為某個值 | 函數返回一個布爾值。true:為某個值;false:不為某個值 |
get | 獲取某個值 | 函數返回一個非布爾值 |
set | 設置某個值 | 無返回值、返回是否設置成功或者返回鏈式對象 |
load | 加載某些數據 | 無返回值或者返回是否加載完成的結果 |
/* * @description: * @Author: xiaoping.zhang * @Date: 2019-02-17 10:22:28 * @LastEditors: xiaoping.zhang * @LastEditTime: 2019-02-17 10:22:28 */代碼片段注釋
/** * @Author: xiaoping.zhang * @description: * @return: * @Date: 2019-07-17 22:35:35 */類型 基本類型
字符串
數值
布爾類型
null
undefined
const foo = 1 let bar = foo bar = 9 console.log(foo, bar) // 1, 9復雜類型
object
array
function
const foo = [1, 2, 3] const bar = foo bar[0] = 9 console.log(foo[0], bar[0]) // 9, 9引用
對所有引用都使用 const,不要使用 var
// bad var a = 1 var b = 2 // good const a = 1 const b = 2
如果引用是可變動的,則使用let
// bad var count = 1 if (count < 10) { count += 1 } // good let count = 1 if (count < 10) { count += 1 }對象
請使用字面量值創建對象
/ bad const a = new Object{} // good const a = {}
別使用保留字作為對象的鍵值,這樣在 IE8 下不會運行
// bad const a = { default: {}, // default 是保留字 common: {} } // good const a = { defaults: {}, common: {} }
請使用對象方法的簡寫方式
const job = "FrontEnd" // bad const item = { job: job } // good const item = { job }
-對象屬性值的簡寫方式要和聲明式的方式分組
onst job = "FrontEnd" const department = "JDC" // bad const item = { sex: "male", job, age: 25, department } // good const item = { job, department, sex: "male", age: 25 }數組
請使用字面量值創建數組
// bad const items = new Array() // good const items = []
向數組中添加元素時,請使用 push 方法
const items = [] // bad items[items.length] = "test" // good items.push("test")
使用拓展運算符 ... 復制數組
// bad const items = [] const itemsCopy = [] const len = items.length let i // bad for (i = 0; i < len; i++) { itemsCopy[i] = items[i] } // good itemsCopy = [...items]
-使用數組的 map 等方法時,請使用 return 聲明,如果是單一聲明語句的情況,可省略 return
// good [1, 2, 3].map(x => { const y = x + 1 return x * y }) // good [1, 2, 3].map(x => x + 1) // bad const flat = {} [[0, 1], [2, 3], [4, 5]].reduce((memo, item, index) => { const flatten = memo.concat(item) flat[index] = flatten }) // good const flat = {} [[0, 1], [2, 3], [4, 5]].reduce((memo, item, index) => { const flatten = memo.concat(item) flat[index] = flatten return flatten }) // bad inbox.filter((msg) => { const { subject, author } = msg if (subject === "Mockingbird") { return author === "Harper Lee" } else { return false } }) // good inbox.filter((msg) => { const { subject, author } = msg if (subject === "Mockingbird") { return author === "Harper Lee" } return false })解構賦值
當需要使用對象的多個屬性時,請使用解構賦值
// bad function getFullName (user) { const firstName = user.firstName const lastName = user.lastName return `${firstName} ${lastName}` } // good function getFullName (user) { const { firstName, lastName } = user return `${firstName} ${lastName}` } // better function getFullName ({ firstName, lastName }) { return `${firstName} ${lastName}` }
當需要使用數組的多個值時,請同樣使用解構賦值
const arr = [1, 2, 3, 4] // bad const first = arr[0] const second = arr[1] // good const [first, second] = arr
函數需要回傳多個值時,請使用對象的解構,而不是數組的解構
// bad function doSomething () { return [top, right, bottom, left] } // 如果是數組解構,那么在調用時就需要考慮數據的順序 const [top, xx, xxx, left] = doSomething() // good function doSomething () { return { top, right, bottom, left } } // 此時不需要考慮數據的順序 const { top, left } = doSomething()字符串
字符串統一使用單引號的形式" "
// bad const department = "JDC" // good const department = "JDC"
字符串太長的時候,請不要使用字符串連接符換行,而是使用 +
const str = "前端js規范" + "前端js規范" + "前端js規范前端js規范前端js規范"
程序化生成字符串時,請使用模板字符串
const test = "test" // bad const str = ["a", "b", test].join() // bad const str = "a" + "b" + test // good const str = `ab${test}`函數
請使用函數聲明,而不是函數表達式
/ bad const foo = function () { // do something } // good function foo () { // do something }
不要在非函數代碼塊中聲明函數
// bad if (isUse) { function test () { // do something } } // good let test if (isUse) { test = () => { // do something } }
不要使用 arguments,可以選擇使用 ...
// bad function test (opts) { opts = opts || {} } // good function test (opts = {}) { // ... }模塊
使用標準的 ES6 模塊語法 import 和 export
// bad const util = require("./util") module.exports = util // good import Util from "./util" export default Util // better import { Util } from "./util" export default Util
不要使用 import 的通配符 *,這樣可以確保你只有一個默認的 export
// bad import * as Util from "./util" // good import Util from "./util"迭代器
不要使用 iterators
const numbers = [1, 2, 3, 4, 5] // bad let sum = 0 for (let num of numbers) { sum += num } // good let sum = 0 numbers.forEach(num => sum += num) // better const sum = numbers.reduce((total, num) => total + num, 0)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105769.html
摘要:的報告進一步證實了與成功項目最密切的因素是良好的需求管理,也就是項目的范圍管理,特別是管理好項目的變更。需求管理的第一步就是要梳理不同來源的需求,主要包括從產品定位出發外部用戶反饋競爭對手情況市場變化以及內部運營人員客服人員開發人員的反饋。 showImg(https://upload-images.jianshu.io/upload_images/2509688-ac38883baf...
導語: 隨著業務的增長和開發團隊的成員快速增加,其中很多新人來自于五湖四海各大門派,在編碼的風格和習慣中也出現各異。 通常在相互 codereview 時發現很多代碼上的問題,久而久之代碼出現了代碼難以維護的問題,甚至還會出現低級錯誤。 因此,我嘗試在前端代碼質量的管控上做了些探索,也總結了一些經驗分享給大家。 作者:鄭振波 本文大綱介紹 編碼規范 冗余文件與代碼 1. 編碼規范 在一些老項...
閱讀 3077·2019-08-30 15:56
閱讀 1234·2019-08-29 15:20
閱讀 1571·2019-08-29 13:19
閱讀 1473·2019-08-29 13:10
閱讀 3381·2019-08-26 18:27
閱讀 3068·2019-08-26 11:46
閱讀 2234·2019-08-26 11:45
閱讀 3753·2019-08-26 10:12