<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Vue 前端開發(fā)團隊風(fēng)格指南(史上最全)

      Vue官網(wǎng)的風(fēng)格指南按照優(yōu)先級(依次為必要、強烈推薦、推薦、謹慎使用)分類,本文根據(jù)項目實際情況整理了一份適用于團隊開發(fā)的vue風(fēng)格指南,供大家參考。

      Vue 前端開發(fā)團隊風(fēng)格指南(史上最全)

      一、命名規(guī)范

      常用的命名規(guī)范:

      • camelCase(小駝峰式命名法 —— 首字母小寫)
      • PascalCase(大駝峰式命名法 —— 首字母大寫)
      • kebab-case(短橫線連接式)
      • Snake (下劃線連接式)

      1.1 項目文件命名

      1.1.1 項目名

      全部采用小寫方式, 以短橫線分隔。例:my-project-name。

      1.1.2 目錄名

      參照項目命名規(guī)則,有復(fù)數(shù)結(jié)構(gòu)時,要采用復(fù)數(shù)命名法。例:docs、assets、components、directives、mixins、utils、views。

      my-project-name/
      |- BuildScript    // 流水線部署文件目錄
      |- docs           // 項目的細化文檔目錄(可選)
      |- nginx          // 部署在容器上前端項目 nginx 代理文件目錄
      |- node_modules   // 下載的依賴包
      |- public         // 靜態(tài)頁面目錄
          |- index.html // 項目入口
      |- src            // 源碼目錄
          |- api        // http 請求目錄
          |- assets     // 靜態(tài)資源目錄,這里的資源會被wabpack構(gòu)建
              |- icon   // icon 存放目錄
              |- img    // 圖片存放目錄
              |- js     // 公共 js 文件目錄
              |- scss   // 公共樣式 scss 存放目錄
                  |- frame.scss   // 入口文件
                  |- global.scss  // 公共樣式
                  |- reset.scss   // 重置樣式
          |- components     // 組件
          |- plugins        // 插件
          |- router         // 路由
          |- routes         // 詳細的路由拆分目錄(可選)
              |- index.js
          |- store          // 全局狀態(tài)管理
          |- utils          // 工具存放目錄
              |- request.js // 公共請求工具
          |- views          // 頁面存放目錄
          |- App.vue        // 根組件
          |- main.js        // 入口文件
          |- tests          // 測試用例
          |- .browserslistrc// 瀏覽器兼容配置文件
          |- .editorconfig  // 編輯器配置文件
          |- .eslintignore  // eslint 忽略規(guī)則
          |- .eslintrc.js   // eslint 規(guī)則
          |- .gitignore     // git 忽略規(guī)則
          |- babel.config.js // babel 規(guī)則
          |- Dockerfile // Docker 部署文件
          |- jest.config.js
          |- package-lock.json
          |- package.json // 依賴
          |- README.md // 項目 README
          |- vue.config.js // webpack 配置
      

      1.1.3 圖像文件名

      全部采用小寫方式, 優(yōu)先選擇單個單詞命名,多個單詞命名以下劃線分隔。

      banner_sina.gif
      menu_aboutus.gif
      menutitle_news.gif
      logo_police.gif
      logo_national.gif
      pic_people.jpg
      pic_TV.jpg
      

      1.1.4 HTML 文件名

      全部采用小寫方式, 優(yōu)先選擇單個單詞命名,多個單詞命名以下劃線分隔。

      |- error_report.html
      |- success_report.html
      

      1.1.5 CSS 文件名

      全部采用小寫方式, 優(yōu)先選擇單個單詞命名,多個單詞命名以短橫線分隔。

      |- normalize.less
      |- base.less
      |- date-picker.scss
      |- input-number.scss
      

      1.1.6 JavaScript 文件名

      全部采用小寫方式, 優(yōu)先選擇單個單詞命名,多個單詞命名以短橫線分隔。

      |- index.js
      |- plugin.js
      |- util.js
      |- date-util.js
      |- account-model.js
      |- collapse-transition.js
      

      上述規(guī)則可以快速記憶為“靜態(tài)文件下劃線,編譯文件短橫線”。

      1.2 Vue 組件命名

      1.2.1 單文件組件名

      文件擴展名為 .vue 的 single-file components (單文件組件)。單文件組件名應(yīng)該始終是單詞大寫開頭 (PascalCase)。

      components/
      |- MyComponent.vue
      

      1.2.2 單例組件名

      只擁有單個活躍實例的組件應(yīng)該以 The 前綴命名,以示其唯一性。
      這不意味著組件只可用于一個單頁面,而是每個頁面只使用一次。這些組件永遠不接受任何 prop,因為它們是為你的應(yīng)用定制的。如果你發(fā)現(xiàn)有必要添加 prop,那就表明這實際上是一個可復(fù)用的組件,只是目前在每個頁面里只使用一次。
      比如,頭部和側(cè)邊欄組件幾乎在每個頁面都會使用,不接受 prop,該組件是專門為該應(yīng)用所定制的。

      components/
      |- TheHeading.vue
      |- TheSidebar.vue
      

      1.2.3 基礎(chǔ)組件名

      基礎(chǔ)組件:不包含業(yè)務(wù),獨立、具體功能的基礎(chǔ)組件,比如日期選擇器、模態(tài)框等。這類組件作為項目的基礎(chǔ)控件,會被大量使用,因此組件的 API 進行過高強度的抽象,可以通過不同配置實現(xiàn)不同的功能。

      應(yīng)用特定樣式和約定的基礎(chǔ)組件(也就是展示類的、無邏輯的或無狀態(tài)、不摻雜業(yè)務(wù)邏輯的組件) 應(yīng)該全部以一個特定的前綴開頭 —— Base。基礎(chǔ)組件在一個頁面內(nèi)可使用多次,在不同頁面內(nèi)也可復(fù)用,是高可復(fù)用組件。

      components/
      |- BaseButton.vue
      |- BaseTable.vue
      |- BaseIcon.vue
      

      1.2.4 業(yè)務(wù)組件

      業(yè)務(wù)組件:它不像基礎(chǔ)組件只包含某個功能,而是在業(yè)務(wù)中被多個頁面復(fù)用的(具有可復(fù)用性),它與基礎(chǔ)組件的區(qū)別是,業(yè)務(wù)組件只在當(dāng)前項目中會用到,不具有通用性,而且會包含一些業(yè)務(wù),比如數(shù)據(jù)請求;而基礎(chǔ)組件不含業(yè)務(wù),在任何項目中都可以使用,功能單一,比如一個具有數(shù)據(jù)校驗功能的輸入框。

      摻雜了復(fù)雜業(yè)務(wù)的組件(擁有自身 data、prop 的相關(guān)處理)即業(yè)務(wù)組件應(yīng)該以 Custom 前綴命名。業(yè)務(wù)組件在一個頁面內(nèi)比如:某個頁面內(nèi)有一個卡片列表,而樣式和邏輯跟業(yè)務(wù)緊密相關(guān)的卡片就是業(yè)務(wù)組件。

      components/
      |- CustomCard.vue 
      

      1.2.5 緊密耦合的組件名

      和父組件緊密耦合的子組件應(yīng)該以父組件名作為前綴命名。 因為編輯器通常會按字母順序組織文件,所以這樣做可以把相關(guān)聯(lián)的文件排在一起。

      components/
      |- TodoList.vue
      |- TodoListItem.vue
      |- TodoListItemButton.vue
      

      1.2.6 組件名中單詞順序

      組件名應(yīng)該以高級別的 (通常是一般化描述的) 單詞開頭,以描述性的修飾詞結(jié)尾。 因為編輯器通常會按字母順序組織文件,所以現(xiàn)在組件之間的重要關(guān)系一目了然。如下組件主要是用于搜索和設(shè)置功能。

      components/
      |- SearchButtonClear.vue
      |- SearchButtonRun.vue
      |- SearchInputQuery.vue
      |- SearchInputExcludeGlob.vue
      |- SettingsCheckboxTerms.vue
      |- SettingsCheckboxLaunchOnStartup.vue
      

      還有另一種多級目錄的方式,把所有的搜索組件放到“search”目錄,把所有的設(shè)置組件放到“settings”目錄。我們只推薦在非常大型 (如有 100+ 個組件) 的應(yīng)用下才考慮這么做,因為在多級目錄間找來找去,要比在單個 components 目錄下滾動查找要花費更多的精力。

      1.2.7 完整單詞的組件名

      組件名應(yīng)該傾向于完整單詞而不是縮寫。 編輯器中的自動補全已經(jīng)讓書寫長命名的代價非常之低了,而其帶來的明確性卻是非常寶貴的。不常用的縮寫尤其應(yīng)該避免。

      components/
      |- StudentDashboardSettings.vue
      |- UserProfileOptions.vue
      

      1.3 代碼參數(shù)命名

      1.3.1 name

      組件名應(yīng)該始終是多個單詞,應(yīng)該始終是 PascalCase 的。 根組件 App 以及 之類的 Vue 內(nèi)置組件除外。這樣做可以避免跟現(xiàn)有的以及未來的 HTML 元素相沖突,因為所有的 HTML 元素名稱都是單個單詞的。

      export default {
        name: 'ToDoList',
        // ...
      }
      

      1.3.2 prop

      在聲明 prop 的時候,其命名應(yīng)該始終使用 camelCase,而在模板和 JSX 中應(yīng)該始終使用 kebab-case。我們單純的遵循每個語言的約定,在 JavaScript 中更自然的是 camelCase。而在 HTML 中則是 kebab-case。

      <WelcomeMessage greeting-text="hi"/>
      
      export default {
        name: 'MyComponent',
        // ...
        props: {
          greetingText: {
            type: String,
            required: true,
            validator: function (value) {
              return ['syncing', 'synced',].indexOf(value) !== -1
            }
          }
        }
      }
      

      1.3.3 router

      Vue Router Path 命名采用 kebab-case 格式。 用 Snake(如:/user_info)或 camelCase(如:/userInfo)的單詞會被當(dāng)成一個單詞,搜索引擎無法區(qū)分語義。

      // bad
      {
        path: '/user_info', // user_info 當(dāng)成一個單詞
        name: 'UserInfo',
        component: UserInfo,
        meta: {
          title: ' - 用戶',
          desc: ''
        }
      },
      
      // good
      {
        path: '/user-info', // 能解析成 user info
        name: 'UserInfo',
        component: UserInfo,
        meta: {
          title: ' - 用戶',
          desc: ''
        }
      },
      

      1.3.4 模板中組件

      對于絕大多數(shù)項目來說,在單文件組件和字符串模板中組件名應(yīng)該總是 PascalCase 的,但是在 DOM 模板中總是 kebab-case 的。

      <!-- 在單文件組件和字符串模板中 --> 
      <MyComponent/>
      
      <!-- 在 DOM 模板中 --> 
      <my-component></my-component>
      

      1.3.5 自閉合組件

      在單文件組件、字符串模板和 JSX 中沒有內(nèi)容的組件應(yīng)該是自閉合的——但在 DOM 模板里永遠不要這樣做。

      <!-- 在單文件組件和字符串模板中 -->
      <MyComponent/>
      
      <!-- 在所有地方 -->
      <my-component></my-component> 
      

      1.3.6 變量

      • 命名方法:camelCase
      • 命名規(guī)范:類型 + 對象描述或?qū)傩缘姆绞?/li>
      // bad
      var getTitle = "LoginTable"
      
      // good
      let tableTitle = "LoginTable"
      let mySchool = "我的學(xué)校" 
      

      1.3.7 常量

      • 命名方法:全部大寫下劃線分割
      • 命名規(guī)范:使用大寫字母和下劃線來組合命名,下劃線用以分割單詞
      const MAX_COUNT = 10
      const URL = 'http://test.host.com'
      

      1.3.8 方法

      • 命名方法:camelCase
      • 命名規(guī)范:統(tǒng)一使用動詞或者動詞 + 名詞形式
      // 1、普通情況下,使用動詞 + 名詞形式
      // bad
      go、nextPage、show、open、login
      
      // good
      jumpPage、openCarInfoDialog
      
      // 2、請求數(shù)據(jù)方法,以 data 結(jié)尾
      // bad
      takeData、confirmData、getList、postForm
      
      // good
      getListData、postFormData
      
      // 3、單個動詞的情況
      init、refresh
      
      動詞 含義 返回值
      can 判斷是否可執(zhí)行某個動作 (權(quán) ) 函數(shù)返回一個布爾值。true:可執(zhí)行;false:不可執(zhí)行;
      has 判斷是否含有某個值 函數(shù)返回一個布爾值。true:含有此值;false:不含有此值;
      is 判斷是否為某個值 函數(shù)返回一個布爾值。true:為某個值;false:不為某個值;
      get 獲取某個值 函數(shù)返回一個非布爾值
      set 設(shè)置某個值 無返回值、返回是否設(shè)置成功或者返回鏈式對象

      1.3.9 自定義事件

      自定義事件應(yīng)始終使用 kebab-case 的事件名。
      不同于組件和 prop,事件名不存在任何自動化的大小寫轉(zhuǎn)換。而是觸發(fā)的事件名需要完全匹配監(jiān)聽這個事件所用的名稱。

      this.$emit('my-event')
      
      <MyComponent @my-event="handleDoSomething" />
      

      不同于組件和 prop,事件名不會被用作一個 JavaScript 變量名或 property 名,所以就沒有理由使用 camelCase 或 PascalCase 了。并且 v-on 事件監(jiān)聽器在 DOM 模板中會被自動轉(zhuǎn)換為全小寫 (因為 HTML 是大小寫不敏感的),所以 v-on:myEvent 將會變成 v-on:myevent——導(dǎo)致 myEvent 不可能被監(jiān)聽到。

      • 原生事件參考列表
        由原生事件可發(fā)現(xiàn)其使用方式如下:
      <div
        @blur="toggleHeaderBlur"
        @focus="toggleHeaderFocus"
        @click="toggleMenu"
        @keydown.esc="handleKeydown"
        @keydown.enter="handleKeydown"
        @keydown.up.prevent="handleKeydown"
        @keydown.down.prevent="handleKeydown"
        @keydown.tab="handleKeydown"
        @keydown.delete="handleKeydown"
        @mouseenter="hasMouseHoverHead = true"
        @mouseleave="hasMouseHoverHead = false">
      </div> 
      

      而為了區(qū)分原生事件自定義事件在 Vue 中的使用,建議除了多單詞事件名使用 kebab-case 的情況下,命名還需遵守為 on + 動詞 的形式,如下:

      <!-- 父組件 -->
      <div
        @on-search="handleSearch"
        @on-clear="handleClear"
        @on-clickoutside="handleClickOutside">
      </div>
      
      // 子組件
      export default {
        methods: {
          handleTriggerItem () {
            this.$emit('on-clear')
          }
        }
      }
      

      1.3.10 事件方法

      • 命名方法:camelCase
      • 命名規(guī)范:handle + 名稱(可選)+ 動詞
      <template>
        <div
          @click.native.stop="handleItemClick()"
          @mouseenter.native.stop="handleItemHover()">
        </div>
      </template>
      
      <script>
      
      export default {
        methods: {
          handleItemClick () {
            //...
          },
          handleItemHover () {
            //...
          }
        }
      }
      </script>
      

      二、代碼規(guī)范

      2.1 Vue

      2.1.1 代碼結(jié)構(gòu)

      <template>
        <div id="my-component">
          <DemoComponent />
        </div>
      </template>
      
      <script>
      import DemoComponent from '../components/DemoComponent'
      
      export default {
        name: 'MyComponent',
        components: {
          DemoComponent
        },
        mixins: [],
        props: {},
        data () {
          return {}
        },
        computed: {},
        watch: {}
        created () {},
        mounted () {},
        destroyed () {},
        methods: {},
      }
      </script>
      
      <style lang="scss" scoped>
      #my-component {
      }
      </style>
      

      2.1.2 data

      組件的 data 必須是一個函數(shù)。

      // In a .vue file
      export default {
        data () {
          return {
            foo: 'bar'
          }
        }
      } 
      

      2.1.3 prop

      Prop 定義應(yīng)該盡量詳細。

      export default {
        props: {
          status: {
            type: String,
            required: true,
            validator: function (value) {
              return [
                'syncing', 
                'synced',
                'version-conflict',
                'error'
              ].indexOf(value) !== -1
            }
          }
        }
      } 
      

      2.1.4 computed

      應(yīng)該把復(fù)雜計算屬性分割為盡可能多的更簡單的屬性。 小的、專注的計算屬性減少了信息使用時的假設(shè)性限制,所以需求變更時也用不著那么多重構(gòu)了。

      // bad
      computed: { 
        price: function () { 
          var basePrice = this.manufactureCost / (1 - this.profitMargin) 
          return ( 
            basePrice - 
            basePrice * (this.discountPercent || 0) 
          ) 
        } 
      }
      
      // good
      computed: {
        basePrice: function () {
          return this.manufactureCost / (1 - this.profitMargin)
        },
        discount: function () {
          return this.basePrice * (this.discountPercent || 0)
        },
        finalPrice: function () {
          return this.basePrice - this.discount
        }
      }
      

      2.1.5 為 v-for 設(shè)置鍵值

      在組件上必須用 key 搭配 v-for,以便維護內(nèi)部組件及其子樹的狀態(tài)。

      <ul>
        <li
          v-for="todo in todos"
          :key="todo.id">
            {{ todo.text }}
        </li>
      </ul>
      

      2.1.6 v-if 和 v-for 互斥

      永遠不要把 v-if 和 v-for 同時用在同一個元素上。

      <!-- bad:控制臺報錯 -->
      <ul>
        <li
          v-for="user in users"
          v-if="shouldShowUsers"
          :key="user.id">
            {{ user.name }}
        </li>
      </ul>
      

      一般我們在兩種常見的情況下會傾向于這樣做:

      • 為了過濾一個列表中的項目 (比如 v-for="user in users" v-if="user.isActive")。在這種情形下,請將 users 替換為一個計算屬性 (比如 activeUsers),讓其返回過濾后的列表。
      computed: {
        activeUsers: function () {
          return this.users.filter((user) => {
            return user.isActive
          })
        }
      }
      
      <ul>
        <li
          v-for="user in activeUsers"
          :key="user.id">
            {{ user.name }}
        </li>
      </ul>
      
      • 為了避免渲染本應(yīng)該被隱藏的列表 (比如 v-for="user in users" v-if="shouldShowUsers")。這種情形下,請將 v-if 移動至容器元素上 (比如 ul, ol)。
      <!-- bad -->
      <ul>
        <li
          v-for="user in users"
          v-if="shouldShowUsers"
          :key="user.id">
            {{ user.name }}
        </li>
      </ul>
      
      <!-- good -->
      <ul v-if="shouldShowUsers">
        <li
          v-for="user in users"
          :key="user.id">
            {{ user.name }}
        </li>
      </ul>
      

      2.1.7 多個 attribute 的元素

      多個 attribute 的元素應(yīng)該分多行撰寫,每個 attribute 一行。

      <!-- bad -->
      <img src="https://vuejs.org/images/logo.png" alt="Vue Logo">
      <MyComponent foo="a" bar="b" baz="c"/>
      
      <!-- good -->
      <img
        src="https://vuejs.org/images/logo.png"
        alt="Vue Logo">
      
      <MyComponent
        foo="a"
        bar="b"
        baz="c"/>
      

      2.1.8 模板中簡單的表達式

      組件模板應(yīng)該只包含簡單的表達式,復(fù)雜的表達式則應(yīng)該重構(gòu)為計算屬性或方法。
      復(fù)雜表達式會讓你的模板變得不那么聲明式。我們應(yīng)該盡量描述應(yīng)該出現(xiàn)的是什么,而非如何計算那個值。而且計算屬性和方法使得代碼可以重用。

      // bad
      {{
        fullName.split(' ').map((word) => {
          return word[0].toUpperCase() + word.slice(1)
        }).join(' ')
      }}
      

      更好的做法:

      <!-- 在模板中 -->
      {{ normalizedFullName }}
      
      // 復(fù)雜表達式已經(jīng)移入一個計算屬性
      computed: {
        normalizedFullName: function () {
          return this.fullName.split(' ').map(function (word) {
            return word[0].toUpperCase() + word.slice(1)
          }).join(' ')
        }
      }
      

      2.1.9 帶引號的 attribute 值

      非空 HTML 特性值應(yīng)該始終帶雙引號。

      <!-- bad -->
      <input type=text>
      <AppSidebar :style={width:sidebarWidth+'px'}>
      
      <!-- good -->
      <input type="text">
      <AppSidebar :style="{ width: sidebarWidth + 'px' }">
      

      2.1.10 指令縮寫

      • 用 : 表示 v-bind:
      • 用 @ 表示 v-on:
      • 用 # 表示 v-slot:
      <input
        :value="newTodoText"
        :placeholder="newTodoInstructions">
      
      <input
        @input="onInput"
        @focus="onFocus">
      
      <template #header>
        <h1>Here might be a page title</h1>
      </template>
      
      <template #footer>
        <p>Here's some contact info</p>
      </template>
      

      2.2 HTML

      2.2.1 文件模板

      HTML5 文件模板:

      <!DOCTYPE html>
        <html lang="zh-CN">
        <head>
          <meta charset="UTF-8">
          <title>HTML5標(biāo)準模版</title>
        </head>
        <body>
        </body>
      </html>
      

      移動端:

      <!DOCTYPE html>
      <html lang="zh-CN">
      <head>
          <meta charset="UTF-8">
          <meta name="viewport"
              content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no">
          <meta name="format-detection" content="telephone=no">
          <title>移動端HTML模版</title>
      
          <!-- S DNS預(yù)解析 -->
          <link rel="dns-prefetch" href="">
          <!-- E DNS預(yù)解析 -->
      
          <!-- S 線上樣式頁面片,開發(fā)請直接取消注釋引用 -->
          <!-- #include virtual="" -->
          <!-- E 線上樣式頁面片 -->
      
          <!-- S 本地調(diào)試,根據(jù)開發(fā)模式選擇調(diào)試方式,請開發(fā)刪除 -->
          <link rel="stylesheet" href="css/index.css">
          <!-- /本地調(diào)試方式 -->
      
          <link rel="stylesheet" href="http://srcPath/index.css">
          <!-- /開發(fā)機調(diào)試方式 -->
          <!-- E 本地調(diào)試 -->
      
      </head>
      <body>
      </body>
      </html>
      

      PC 端:

      <!DOCTYPE html>
      <html lang="zh-CN">
      <head>
          <meta charset="UTF-8">
          <meta name="keywords" content="your keywords">
          <meta name="description" content="your description">
          <meta name="author" content="author,email address">
          <meta name="robots" content="index,follow">
          <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
          <meta name="renderer" content="ie-stand">
          <title>PC端HTML模版</title>
      
          <!-- S DNS預(yù)解析 -->
          <link rel="dns-prefetch" href="">
          <!-- E DNS預(yù)解析 -->
      
          <!-- S 線上樣式頁面片,開發(fā)請直接取消注釋引用 -->
          <!-- #include virtual="" -->
          <!-- E 線上樣式頁面片 -->
      
          <!-- S 本地調(diào)試,根據(jù)開發(fā)模式選擇調(diào)試方式,請開發(fā)刪除 -->
          <link rel="stylesheet" href="css/index.css">
          <!-- /本地調(diào)試方式 -->
      
          <link rel="stylesheet" href="http://srcPath/index.css">
          <!-- /開發(fā)機調(diào)試方式 -->
          <!-- E 本地調(diào)試 -->
      </head>
      <body>
      </body>
      </html>
      

      2.2.2 元素及標(biāo)簽閉合

      HTML 元素共有以下5種:

      • 空元素:area、base、br、col、command、embed、hr、img、input、keygen、link、meta、param、source、track、wbr
      • 原始文本元素:script、style
      • RCDATA 元素:textarea、title
      • 外來元素:來自 MathML 命名空間和 SVG 命名空間的元素
      • 常規(guī)元素:其他 HTML 允許的元素都稱為常規(guī)元素
        為了能讓瀏覽器更好的解析代碼以及能讓代碼具有更好的可讀性,有如下約定:
      • 所有具有開始標(biāo)簽和結(jié)束標(biāo)簽的元素都要寫上起止標(biāo)簽,某些允許省略開始標(biāo)簽或和束標(biāo)簽的元素亦都要寫上。
      • 空元素標(biāo)簽都不加 “/” 字符。
      <!-- good -->
      <div>
          <h1>我是h1標(biāo)題</h1>
          <p>我是一段文字,我有始有終,瀏覽器能正確解析</p>
      </div>
       
      <br data-tomark-pass>
      
      <!-- bad -->
      <div>
          <h1>我是h1標(biāo)題</h1>
          <p>我是一段文字,我有始無終,瀏覽器亦能正確解析
      </div>
      
      <br/>
      

      2.2.3 代碼嵌套

      元素嵌套規(guī)范,每個塊狀元素獨立一行,內(nèi)聯(lián)元素可選。

      <!-- good -->
      <div>
          <h1></h1>
          <p></p>
      </div> 
      <p><span></span><span></span></p>
      
      <!-- bad -->
      <div>
          <h1></h1><p></p>
      </div> 
      <p> 
          <span></span>
          <span></span>
      </p>
      

      段落元素與標(biāo)題元素只能嵌套內(nèi)聯(lián)元素。

      <!-- good -->
      <h1><span></span></h1>
      <p><span></span><span></span></p>
      
      <!-- bad -->
      <h1><div></div></h1>
      <p><div></div><div></div></p>
      

      2.3 CSS

      2.3.1 樣式文件

      樣式文件必須寫上 @charset 規(guī)則,并且一定要在樣式文件的第一行首個字符位置開始寫,編碼名用 “UTF-8”。

      • 推薦:
      @charset "UTF-8";
      .jdc {}
      
      • 不推薦:
      /* @charset規(guī)則不在文件首行首個字符開始 */
      @charset "UTF-8";
      .jdc {}
      
      /* @charset規(guī)則沒有用小寫 */
      @CHARSET "UTF-8";
      .jdc {}
      
      /* 無@charset規(guī)則 */
      .jdc {}
      

      2.3.2 代碼格式化

      樣式書寫一般有兩種:一種是緊湊格式 (Compact),一種是展開格式(Expanded)。

      • 推薦:展開格式(Expanded)
      .jdc {
        display: block;
        width: 50px;
      }
      
      • 不推薦:緊湊格式 (Compact)
      .jdc { display: block; width: 50px;}
      

      2.3.3 代碼大小寫

      樣式選擇器,屬性名,屬性值關(guān)鍵字全部使用小寫字母書寫,屬性字符串允許使用大小寫。

      • 推薦:
      .jdc {
        display: block;
      }
      
      • 不推薦:
      .JDC {
        DISPLAY: BLOCK;
      }
      

      2.3.4 代碼易讀性

      1. 左括號與類名之間一個空格,冒號與屬性值之間一個空格。
      • 推薦:
      .jdc {
        width: 100%;
      }
      
      • 不推薦:
      .jdc{
        width:100%;
      }
      
      1. 逗號分隔的取值,逗號之后一個空格。
      • 推薦:
      .jdc {
        box-shadow: 1px 1px 1px #333, 2px 2px 2px #ccc;
      }
      
      • 不推薦:
      .jdc {
        box-shadow: 1px 1px 1px #333,2px 2px 2px #ccc;
      }
      
      1. 為單個 CSS 選擇器或新聲明開啟新行。
      • 推薦:
      .jdc, .jdc_logo, .jdc_hd {
        color: #ff0;
      }
      
      .nav{
        color: #fff;
      }
      
      • 不推薦:
      .jdc, .jdc_logo, .jdc_hd {
        color: #ff0;
      }.nav{
        color: #fff;
      }
      
      1. 顏色值 rgb() rgba() hsl() hsla() rect() 中不需有空格,且取值不要帶有不必要的 0。
      • 推薦:
      .jdc {
        color: rgba(255,255,255,.5);
      }
      
      • 不推薦:
      .jdc {
        color: rgba( 255, 255, 255, 0.5 );
      }
      
      1. 屬性值十六進制數(shù)值能用簡寫的盡量用簡寫。
      • 推薦:
      .jdc {
        color: #fff;
      }
      
      • 不推薦:
      .jdc {
        color: #ffffff;
      }
      
      1. 不要為 0 指明單位。
      • 推薦:
      .jdc {
        margin: 0 10px;
      }
      
      • 不推薦:
      .jdc {
        margin: 0px 10px;
      }
      

      2.3.5 屬性值引號

      CSS 屬性值需要用到引號時,統(tǒng)一使用單引號。

      • 推薦:
        .jdc {
        font-family: 'Hiragino Sans GB';
        }
      • 不推薦:
      .jdc {
        font-family: "Hiragino Sans GB";
      }
      

      2.3.6 屬性書寫建議

      建議遵循以下順序:

      1. 布局定位屬性:display / position / float / clear / visibility / overflow
      2. 自身屬性:width / height / margin / padding / border / background
      3. 文本屬性:color / font / text-decoration / text-align / vertical-align / white- space / break-word
      4. 其他屬性(CSS3):content / cursor / border-radius / box-shadow / text-shadow / background: linear-gradient …
      .jdc {
        display: block;
        position: relative;
        float: left;
        width: 100px;
        height: 100px;
        margin: 0 10px;
        padding: 20px 0;
        font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
        color: #333;
        background: rgba(0,0,0,.5);
        -webkit-border-radius: 10px;
        -moz-border-radius: 10px;
        -o-border-radius: 10px;
        -ms-border-radius: 10px;
        border-radius: 10px;
      }
      

      3.3.7 CSS3 瀏覽器私有前綴

      CSS3 瀏覽器私有前綴在前,標(biāo)準前綴在后。

      .jdc {
        -webkit-border-radius: 10px;
        -moz-border-radius: 10px;
        -o-border-radius: 10px;
        -ms-border-radius: 10px;
        border-radius: 10px;
      }
      

      2.4 JavaScript

      2.4.1 單行代碼塊

      在單行代碼塊中使用空格。

      • 不推薦:
      function foo () {return true}
      if (foo) {bar = 0}
      
      • 推薦:
      function foo () { return true }
      if (foo) { bar = 0 }
      

      2.4.2 大括號風(fēng)格

      在編程過程中,大括號風(fēng)格與縮進風(fēng)格緊密聯(lián)系,用來描述大括號相對代碼塊位置的方法有很多。在 JavaScript 中,主要有三種風(fēng)格,如下:

      • 【推薦】One True Brace Style
      if (foo) {
        bar()
      } else {
        baz()
      }
      
      • Stroustrup
      if (foo) {
        bar()
      }
      else {
        baz()
      }
      
      • Allman
      if (foo)
      {
        bar()
      }
      else
      {
        baz()
      }
      

      2.4.3 代碼中的空格

      1. 逗號前后的空格可以提高代碼的可讀性,團隊約定在逗號后面使用空格,逗號前面不加空格。
      • 推薦:
      var foo = 1, bar = 2
      
      • 不推薦:
      var foo = 1,bar = 2
      
      var foo = 1 , bar = 2
      
      var foo = 1 ,bar = 2
      
      1. 對象字面量的鍵和值之間不能存在空格,且要求對象字面量的冒號和值之間存在一個空格。
      • 推薦:
      var obj = { 'foo': 'haha' }
      
      • 不推薦:
      var obj = { 'foo' : 'haha' }
      
      1. 代碼塊前要添加空格。
      • 推薦:
      if (a) {
        b()
      }
      
      function a () {}
      
      • 不推薦:
      if (a){
        b()
      }
      
      function a (){}
      
      1. 函數(shù)聲明括號前要加空格。
      • 推薦:
      function func (x) {
        // ...
      }
      
      • 不推薦:
      function func(x) {
        // ...
      }
      
      1. 在函數(shù)調(diào)用時,禁止使用空格。
      • 推薦:
      fn()
      
      • 不推薦:
      fn ()
      
      fn
      ()
      
      1. 在操作符前后都需要添加空格。
      • 推薦:
      var sum = 1 + 2
      
      • 不推薦:
      var sum = 1+2
      

      三、注釋規(guī)范

      注釋的目的:

      • 提高代碼的可讀性,從而提高代碼的可維護性
        注釋的原則:
      • 如無必要,勿增注釋 ( As short as possible )
      • 如有必要,盡量詳盡 ( As long as necessary )

      3.1 HTML 文件注釋

      3.1.1 單行注釋

      一般用于簡單的描述,如某些狀態(tài)描述、屬性描述等。
      注釋內(nèi)容前后各一個空格字符,注釋位于要注釋代碼的上面,單獨占一行。

      • 推薦:
      <!-- Comment Text -->
      <div>...</div>
      
      • 不推薦
      <div>...</div><!-- Comment Text -->
      
      <div><!-- Comment Text -->
        ...
      </div>
      

      3.1.2 模塊注釋

      一般用于描述模塊的名稱以及模塊開始與結(jié)束的位置。
      注釋內(nèi)容前后各一個空格字符,模塊與模塊之間相隔一行。

      • 推薦:
      <!-- S Comment Text A --> 
      <div class="mod_a">
        ...
      </div>
      <!-- E Comment Text A -->
       
      <!-- S Comment Text B --> 
      <div class="mod_b">
        ...
      </div>
      <!-- E Comment Text B -->
      
      • 不推薦
      <!-- S Comment Text A -->
      <div class="mod_a">
        ...
      </div>
      <!-- E Comment Text A -->
      <!-- S Comment Text B --> 
      <div class="mod_b">
        ...
      </div>
      <!-- E Comment Text B -->
      

      3.1.3 嵌套模塊注釋

      當(dāng)模塊注釋內(nèi)再出現(xiàn)模塊注釋的時候,為了突出主要模塊,嵌套模塊不再使用。

      <!-- S Comment Text -->
      <!-- E Comment Text -->
      

      而改用

      <!-- /Comment Text -->
      

      注釋寫在模塊結(jié)尾標(biāo)簽底部,單獨一行。

      <!-- S Comment Text A -->
      <div class="mod_a">
        
          <div class="mod_b">
              ...
          </div>
          <!-- /mod_b -->
           
          <div class="mod_c">
           ...
          </div>
          <!-- /mod_c -->
        
      </div>
      <!-- E Comment Text A -->
      

      3.2 CSS 文件注釋

      3.2.1 單行注釋

      注釋內(nèi)容第一個字符和最后一個字符都是一個空格字符,單獨占一行,行與行之間相隔一行。

      • 推薦:
      /* Comment Text */ 
      .jdc {} 
      
      /* Comment Text */ 
      .jdc {}
      
      • 不推薦:
      /*Comment Text*/
      .jdc {
        display: block;
      }
      
      .jdc {
        display: block;/*Comment Text*/
      }
      

      3.2.2 模塊注釋

      注釋內(nèi)容第一個字符和最后一個字符都是一個空格字符,/* 與 模塊信息描述占一行,多個橫線分隔符 - 與 */ 占一行,行與行之間相隔兩行。

      • 推薦:
      /* Module A
      ---------------------------------------------------------------- */
      .mod_a {}
      
      
      /* Module B
      ---------------------------------------------------------------- */
      .mod_b {}
      
      • 不推薦:
      /* Module A ---------------------------------------------------- */
      .mod_a {}
      /* Module B ---------------------------------------------------- */
      .mod_b {}
      

      3.2.3 文件注釋

      在樣式文件編碼聲明 @charset 語句下面注明頁面名稱、作者、創(chuàng)建日期等信息。

      @charset "UTF-8";
      /**
       * @desc File Info
       * @author Author Name
       * @date 2015-10-10
       */
      

      3.3 JavaScript 文件注釋

      3.3.1 單行注釋

      單行注釋使用 //,注釋應(yīng)單獨一行寫在被注釋對象的上方,不要追加在某條語句的后面。

      • 推薦:
      // is current tab
      const active = true
      
      • 不推薦:
      const active = true // is current tab
      

      注釋行的上方需要有一個空行(除非注釋行上方是一個塊的頂部),以增加可讀性。

      • 推薦:
      function getType () {  
        console.log('fetching type...')
        
        // set the default type to 'no type'
        const type = this.type || 'no type'
        return type
      }
      
      // 注釋行上面是一個塊的頂部時不需要空行
      function getType () {  
        // set the default type to 'no type'
        const type = this.type || 'no type'   
        return type
      }
      
      • 不推薦:
      function getType () {  
        console.log('fetching type...')
        // set the default type to 'no type'
        const type = this.type || 'no type'
        return type
      }
      

      3.3.2 多行注釋

      多行注釋使用 /** ... */,而不是多行的 //。

      • 推薦:
      /**
       * make() returns a new element
       * based on the passed-in tag name
       */
      function make (tag) {
        // ...
      
        return element
      }
      
      • 不推薦:
      // make() returns a new element
      // based on the passed in tag name
      function make (tag) {
        // ...
      
        return element
      }
      

      3.3.3 注釋空格

      注釋內(nèi)容和注釋符之間需要有一個空格,以增加可讀性。eslint: spaced-comment。

      • 推薦:
      // is current tab
      const active = true
      
      /**
       * make() returns a new element
       * based on the passed-in tag name
       */
      function make(tag) {  
        // ...
      
        return element
      }
      
      • 不推薦:
      //is current tab
      const active = true
      
      /**
       *make() returns a new element
       *based on the passed-in tag name
       */
      function make(tag) {  
        // ...
      
        return element
      }
      

      3.3.4 特殊標(biāo)記

      有時我們發(fā)現(xiàn)某個可能的 bug,但因為一些原因還沒法修復(fù);或者某個地方還有一些待完成的功能,這時我們需要使用相應(yīng)的特殊標(biāo)記注釋來告知未來的自己或合作者。常用的特殊標(biāo)記有兩種:

      • // FIXME : 說明問題是什么
      • // TODO : 說明還要做什么或者問題的解決方案
      class Calculator extends Abacus {
        constructor () {
          super ()
      
            // FIXME: shouldn’t use a global here
            total = 0
      
            // TODO: total should be configurable by an options param
            this.total = 0
        }
      }
      

      3.3.5 文檔類注釋

      文檔類注釋,如函數(shù)、類、文件、事件等;都使用 jsdoc 規(guī)范。

      /**
       * Book類,代表一個書本.
       * @constructor
       * @param {string} title - 書本的標(biāo)題.
       * @param {string} author - 書本的作者.
       */
      function Book (title, author) {
        this.title = title
        this.author = author
      }
      
      Book.prototype = {
        /**
         * 獲取書本的標(biāo)題
         * @returns {string|*}
         */
        getTitle: function () {
          return this.title
        },
        /**
         * 設(shè)置書本的頁數(shù)
         * @param pageNum {number} 頁數(shù)
         */
        setPageNum: function (pageNum) {
          this.pageNum=pageNum
        }
      }
      

      3.3.6 注釋工具

      ESLint 是當(dāng)下最流行的 JS 代碼檢查工具,ESLint 中有一些注釋相關(guān)的規(guī)則,用戶可選擇開啟:

      • valid-jsdoc
      • require-jsdoc
      • no-warning-comments
      • capitalized-comments
      • line-comment-position
      • lines-around-comment
      • multiline-comment-style
      • no-inline-comments
      • spaced-comment

      四、其它

      • 縮進換行請使用兩個空格。
      • 大型團隊多人協(xié)作項目推薦 JavaScript 代碼末尾加分號。
      • 小型個人創(chuàng)新練手項目可嘗試使用 JavaScript 代碼末尾不加分號的風(fēng)格,更加清爽簡練。

      更多技術(shù)文章請往:http://www.guosisoft.com/article,大家一起共同交流和進步呀

      posted @ 2023-05-10 13:13  .NET快速開發(fā)框架  閱讀(365)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 特级精品毛片免费观看| 欧美成a人片在线观看久| 欧美日韩在线视频| 亚洲国产高清av网站| 国产亚洲精品AA片在线播放天 | 国产99青青成人A在线| 女人被狂躁c到高潮| 中文字幕无码av不卡一区| 国内外成人综合免费视频| 成人国产精品日本在线观看| 开心五月激情综合久久爱| 4hu四虎永久免费地址ww416| 亚洲开心婷婷中文字幕| 日韩蜜桃AV无码中文字幕不卡高清一区二区 | 日本边添边摸边做边爱的网站 | 久草热大美女黄色片免费看| 国产精品久久久久久无毒不卡| 熟妇的奶头又大又长奶水视频| 成人亚洲一区二区三区在线| 亚洲人成网网址在线看| 一区二区三区四区黄色片| 二区中文字幕在线观看| 青青草无码免费一二三区| 精品久久亚洲中文无码| 精品视频福利| 中国少妇人妻xxxxx| 商洛市| 中文字幕无线码中文字幕| 377P欧洲日本亚洲大胆| AV区无码字幕中文色| 四虎精品寂寞少妇在线观看| 国产精品国产高清国产av| 国产黄色三级三级看三级| 丁香婷婷色综合激情五月| 亚洲国产欧美一区二区好看电影 | 亚洲国产区男人本色vr| 精品国产肉丝袜在线拍国语| 成人午夜在线观看日韩| 国产激情免费视频在线观看 | 五常市| 欧美野外伦姧在线观看|