コード規範(1)のvue-cliのeslintとAirbnb JavaScript Style

20518 ワード

気が狂うESlint構文の検出構成の説明を抜け出します.
Airbnb JavaScriptコードスタイルガイド(2018年最新版)
 vue-cli足場buildディレクトリのwebpack.base.com nf.js配置ファイル
eslint
ESlintは文法規則とコードスタイルのチェックツールです.コードスタイルの統一を保証し、今後のメンテナンスに便利です. 
vue-cliを使って基本項目を作成し、デフォルトでESlintをインストールします.build/webpack.base.conf.jsで:
//   config    index.js    ,                  ,         eslint      
const config = require('../config')

// ...

//    eslint   
const createLintingRule = () => ({
  test: /\.(js|vue)$/,
  loader: 'eslint-loader',
  enforce: 'pre',
  include: [resolve('src'), resolve('test')],
  options: {
    formatter: require('eslint-friendly-formatter'),
    emitWarning: !config.dev.showEslintErrorsInOverlay
  }
})

  // module         
  module: {
    rules: [
        //    eslint   
      ...(config.dev.useEslint ? [createLintingRule()] : []),
     ]   
  }
  config/index.jsにおいて
module.exports = {
  dev: {
    // ...

    // Use Eslint Loader     ESlint?
    // If true, your code will be linted during bundling and
    // linting errors and warnings will be shown in the console.
      //         ,   console          
    useEslint: true,
    // If true, eslint errors and warnings will also be shown in the error overlay。 eslint               
    // in the browser.
    showEslintErrorsInOverlay: false,
  }
   // ....
}
.eslintrc.jsファイルのカスタムルール:
vue-cliのESlintプロファイルeslintrc.js詳細
vue-cliの下でESlintの配置説明
Airbnb JavaScript Style
参照記事:AirbnbのJavaScriptスタイルガイド(ES 5)
タイプ
基本タイプ
基本タイプの動作時の値の操作複雑なタイプ
複雑なタイプの動作については、参照動作である.
オブジェクト
できるだけ字面量を使ってオブジェクトを作成します.
保留文字を属性キーとして使用しないでください.
保持ワードの代わりに、可読性の高い同義語を使用する.
行列
字面量をできるだけ使って配列を作成するarr.push()方法を使用して要素を追加する.
コピー配列はarr.slice を使用する.
文字列
シングルクォーテーション''を使用して文字列を定義します.
100以上の文字列は複数の行の形式で書かれ、文字列コネクタ+を使用して接続されるべきである(文字列コネクタを使いすぎると性能に影響を与える可能性がある).
コードに文字列を構築するときは、文字列コネクタarr.join() を使用するのではなく、+方法を使用する.
関数
関数ブロック(if,while)では関数を宣言しないでください.しかし、関数を変数にコピーすることができます.
一つのパラメータをargumentsと命名しないでください.これは各関数のデフォルトargumentsオブジェクトをカバーします.
属性
ポイント番号.を使用してオブジェクトの属性を取得する.
取得する属性キーの値が変数である場合は、[]を使用してを取得することができます.
変数
宣言変数の使用は常にvarに記入されます.そうしないとグローバル変数が得られ、グローバル変数の名前空間が汚染されます.(今は普通constletを使います.)各変数宣言は別のvar を使用します.
変数が割り当てられていない宣言を最後に置くと、変数の割り当て値の使用が他の変数に依存する必要がある場合に役立ちます.
変数宣言をそのスコープの一番上に置くと、変数の引き上げによる問題が回避されます.
変数の昇格
変数の宣言文は、インタプリタによって自動的にそのスコープの最上部に引き上げられますが、その割り当てられたステートメントは向上しません.匿名関数式の変数宣言はアップグレードされますが、関数はアップグレードされません.名前付きの関数式の変数宣言は向上しますが、関数名と関数体は向上しません.関数宣言時にインタプリタが関数名と関数体を作用領域の上部に引き上げます.比較演算子===および!==を使用することは、==および!=を使用することよりも理想的なである.
条件文は、式の値を判断する際に、ToBooleanの抽象的な方法を用いて結果をブール値に強制変換します.
Objectはtrue に変換されます.
Unidefinedはfalse に変換されます.
Nullがfalse に変換されます.
Booleans不変Numbersが+0であれば-0またはNaNがfalseに変換され、そうでなければtrue に変換されます.
Stringsが空の文字列''であればfalseに変換され、そうでなければtrue に変換される.
短い形式を使う
空白文字
2つのスペースをインデントする左大かっこの前にスペースを残してください.
制御文if,whileの小かっこはスペースを残して、関数の説明リストの前にスペースを残しないでください.
演算子をスペースで区切るファイルは最後に独立した改行で終了します.長い方法でチェーンを呼び出し、改行インデント方式(以下のコードを参照)を使用し、点番号.で開始し、この行は新しい語句ではなく方法であることを強調する.
//    
$('#items').find('.selected').highlight().end().find('.open').updateCount();
  • コードブロックの終了と新しい語句の間に空行を残します.
  • コンマ
    行頭に置くコンマ: を使わないでください.
    オブジェクトまたは配列の末尾に追加のコンマを付ける: を使わないでください.
    セミコロン
    を使ってください.
    類型転化と強制転化
    ステートメントの開始時に実行されるタイプの強制変換文字列
    //   
    var totalScore = '' + this.reviewScore;
    
    //   
    var totalScore = this.reviewScore + ' total score';
    デジタルタイプ変換にはparseIntが使用され、常に基数を有する.
    //   
    var val = Number(inputValue);
    
    //   
    var val = parseInt(inputValue, 10);
    いくつかの極端な状況に遭遇すると、parseIntはボトルネックとなり、性能要因はシフト動作を使用する必要があるので、コメントを残してあなたの理由を説明します.
    //   
    /**
     * parseInt         ,
     *                     
     */
    var val = inputValue >> 0;
    ブール値
    var age = 0;
    
    //    
    var hasAge = new Boolean(age);
    
    //   
    var hasAge = Boolean(age);
    
    //   
    var hasAge = !!age;
    命名仕様
    単文字のネーミングを避け、意味のあるネーミングをできるだけ使う.オブジェクト、関数、インスタンスの名前は、ラクダの名前(小さなラクダの名前、例えば:thisIsMyObject)を使用して構造方法や類の命名にはパスカルを使って命名されます.プライベート属性の名前が付けられている場合は、アンダースコア_で開始します.thisまでの参照を保存するには、_thisを使用して変数の名前を付けてください.あなたの関数に名前を付けると、デバッグ時のコードスタックの追跡に役立ちます.
    //    
    var log = function (msg) {
      console.log(msg);
    };
    
    //   
    var log = function log(msg) {
      console.log(msg);
    };
  • もしあなたのソースファイルの中で一つのカテゴリーだけをエクスポートしたら、ファイル名とクラス名が一致するようにしてください.
    //     
    class CheckBox {
      // ...
    }
    module.exports = CheckBox;
    
    //       
    //    
    var CheckBox = require('./checkBox');
    
    //    
    var CheckBox = require('./check_box');
    
    //   
    var CheckBox = require('./CheckBox');
    属性アクセサ
    属性アクセサメソッドは必須ではありません.
  • 属性アクセサを定義するなら、getValとsetValのパターンによって命名されます.
    //    
    dragon.age();
    
    //   
    dragon.getAge();
    
    //    
    dragon.age(25);
    
    //   
    dragon.setAge(25);
  • 属性がブール型であれば、isVal()またはhasVal()の形を使用する
  • .
    //    
    if (!dragon.age()) {
      return false;
    }
    
    //   
    if (!dragon.hasAge()) {
      return false;
    }
  • は、get()とset()関数を作成することもできるが、その挙動の一貫性を維持する.
  • function Jedi(options) {
      options || (options = {});
      var lightsaber = options.lightsaber || 'blue';
      this.set('lightsaber', lightsaber);
    }
    
    Jedi.prototype.set = function set(key, val) {
      this[key] = val;
    };
    
    Jedi.prototype.get = function get(key) {
      return this[key];
    };
    コンストラクタ
    オブジェクトのプロトタイプを直接新しいオブジェクトで上書きしないように、新しい方法をオブジェクトのプロトタイプに割り当てます.毎回対象の原型を覆うと、継承ができなくなります.その都度、基質を直接カバーするすべての方法があります.
    //    
    Jedi.prototype = {
      fight: function fight() {
        console.log('fighting');
      },
    
      block: function block() {
        console.log('blocking');
      }
    };
    
    //   
    Jedi.prototype.fight = function fight() {
      console.log('fighting');
    };
    
    Jedi.prototype.block = function block() {
      console.log('blocking');
    };
  • 方法は、方法チェーンの構築を支援するためにthisに戻ることができる.
  • //    
    Jedi.prototype.jump = function jump() {
      this.jumping = true;
      return true;
    };
    
    Jedi.prototype.setHeight = function setHeight(height) {
      this.height = height;
    };
    
    var luke = new Jedi();
    luke.jump(); // => true
    luke.setHeight(20); // => undefined
    
    //   
    Jedi.prototype.jump = function jump() {
      this.jumping = true;
      return this;
    };
    
    Jedi.prototype.setHeight = function setHeight(height) {
      this.height = height;
      return this;
    };
    
    var luke = new Jedi();
    
    luke.jump()
      .setHeight(20);
  • は、カスタムtoStringを作成しても良いですが、その正確性を確保し、コードの他のところに影響があるかどうか注意してください.
  • function Jedi(options) {
      options || (options = {});
      this.name = options.name || 'no name';
    }
    
    Jedi.prototype.getName = function getName() {
      return this.name;
    };
    
    Jedi.prototype.toString = function toString() {
      return 'Jedi - ' + this.getName();
    };
    イベント
    データを一つのイベント(DOMイベントでも他のイベントでも)に結びつける必要がある場合は、直接にデータの対象自体に入らないでください.キーオブジェクトに包装してから入ってきます.これは後続の操作で他の多くのデータが本イベントに入る必要がないことを確認できないからです.例えば、以下のようなのはよくないです.
    //    
    $(this).trigger('listingUpdated', listing.id);
    
    ...
    
    $(this).on('listingUpdated', function (e, listingId) {
      // do something with listingId
    });
    より良いやり方は:
    //   
    $(this).trigger('listingUpdated', { listingId : listing.id });
    
    ...
    
    $(this).on('listingUpdated', function (e, data) {
      // do something with data.listingId
    });
    モジュール
    モジュールは一つの!で始まるべきです.このモジュールが他の第三者モジュールの末尾に合併された場合、この第三者モジュールは終端のセミコロンを忘れた場合、エラーが発生しないようにしてください.もっと説明してください.
    ファイルはラクダの命名規則によって名づけられます.フォルダにファイルが一つしかない場合は、フォルダ名とファイル名が一致します.noConflict()という名前の方法を追加すると、各モジュールは前のバージョンに設定され、このモジュールに戻る.モジュールの上部では常に'use strict';を宣言する.
    // fancyInput/fancyInput.js
    
    !function (global) {
      'use strict';
    
      var previousFancyInput = global.FancyInput;
    
      function FancyInput(options) {
        this.options = options || {};
      }
    
      FancyInput.noConflict = function noConflict() {
        global.FancyInput = previousFancyInput;
        return FancyInput;
      };
    
      global.FancyInput = FancyInput;
    }(this);
    jQuery
    jQueryオブジェクトの変数名は$で始まる.
    //    
    var sidebar = $('.sidebar');
    
    //   
    var $sidebar = $('.sidebar');
  • は、jQuery選択結果をキャッシュする.
  • //    
    function setSidebar() {
      $('.sidebar').hide();
    
      // ...stuff...
    
      $('.sidebar').css({
        'background-color': 'pink'
      });
    }
    
    //   
    function setSidebar() {
      var $sidebar = $('.sidebar');
      $sidebar.hide();
    
      // ...stuff...
    
      $sidebar.css({
        'background-color': 'pink'
      });
    }
    カスケード形$('.sidebar ul')または$('.sidebar > ul')を用いてDOM要素を検索する.findを使用して、ある範囲のjQueryオブジェクトを検索する.
    //    
    $('ul', '.sidebar').hide();
    
    //    
    $('.sidebar').find('ul').hide();
    
    //   
    $('.sidebar ul').hide();
    
    //   
    $('.sidebar > ul').hide();
    
    //   
    $sidebar.find('ul').hide();
    転載先:https://www.cnblogs.com/houfee/p/10419106.html