目次
1. 変数の宣言" >1. 変数の宣言
1.1 変数の宣言には var を使用せず、const を使用するようにしてください
1.2 可変参照を宣言する必要がある場合は、var
1.3 に属します。宣言された let と const
1.4 letとconstで宣言した変数を適切な場所に配置する
2.3 オブジェクトのプロパティも省略形を使用します
2.5 代わりにオブジェクトの浅いコピーを使用するのが最善です... Object.assign() の
Object.assign() を使用すると、予期しない問題が発生します。
3.1 リテラルを使用して配列を作成する
eslint: no-array-constructor
3.3 Array.from を使用してクラス配列を変換する配列
4. 関数
4.1
なぜですか?なぜなら、関数で宣言された関数が最初に認識されて変数が巻き上げられる(巻き上げられる)のに対し、関数式は関数の参照変数名を巻き上げるだけ(つまり変数巻き上げ)だからです。 " >なぜですか?なぜなら、関数で宣言された関数が最初に認識されて変数が巻き上げられる(巻き上げられる)のに対し、関数式は関数の参照変数名を巻き上げるだけ(つまり変数巻き上げ)だからです。

その理由は、引数がクラス配列であり、配列固有のメソッドがなく、そして...渡すパラメータを明確にすることができるためです。それらは実数配列です。
5.1 関数式を使用する必要がある場合 (または匿名関数を渡す必要がある場合)、代わりにアロー関数を使用できます。その理由は、新しい関数を使用すると新しい関数スコープが作成され、this の現在のポイントが変更され、アロー関数は新しい this 実行環境を作成し、現在の環境の this を引き続き渡すことができるためです。書き方もより簡潔になります。
関数がより複雑な場合、アロー関数を使用すると問題が発生しやすくなります。代わりに関数宣言を使用できます。
6. コンストラクター" >6. コンストラクター

このように書くとより簡潔になります。
7. モジュール開発
モジュールを使用して論理的なビジネスを記述すると、コードがより統合され、スケーラブルになります。同様のライブラリには、seaJS と requireJS があります
7.2少使用通配符import
8.使用高阶函数如map()和reduce()代替for~of
9.1优先使用===和!==而不是==和!=
9.2在做if条件判断时强制类型转换规则

日々のjs開発仕様

May 11, 2018 am 11:28 AM
javascript 開発する 仕様

この記事では、JavaScript の日常的な開発仕様について説明します。これにより、将来の JavaScript の日常的な開発で皆さんが作成する JS コードがより標準化されます。興味のある学生はこの記事を参照してください。日々の開発標準は依然として非常に重要です。

私はフロントエンドの落とし穴に依存する前後にいくつかのプロジェクトを書いてきました。JavaScript でインタラクティブなロジックを作成する際、グローバル変数の汚染、コードの再利用性の低さ、単純さの低さなど、多かれ少なかれゴミコードを作成しました。コードのメンテナンス後に混乱が生じました。以下に、JS コーディングで改善する必要があるいくつかの領域を示します。これらの領域は、開発に直接適用して、より洗練されたコードの作成に取り組むことができます。

コード仕様と言えば、ESLint ルールを思い浮かべるかもしれません。次の仕様には、ESLint ルールに関連する説明があり、おそらく ESLint を使用するときに表示される関連エラー メッセージも役立つでしょう。

1. 変数の宣言

1.1 変数の宣言には var を使用せず、const を使用するようにしてください

eslint:prefer-const, no-const-assign

var の使用を回避すると、グローバル変数を減らすことができます汚染の問題がある場合は、const を使用してください。宣言された変数が一意であり、再割り当てできないことを確認してください。

//bad
var a = 1;
//best
const a = 1;
ログイン後にコピー

1.2 可変参照を宣言する必要がある場合は、var

eslint: no-var jscs: disallowVar

let の代わりに let を使用し、現在の {} のブロックレベルのスコープに属し、かつvar は 関数スコープ

//bad
var count = 1;
if (true) {
	var count = 2;
}
console.log(count)


//best
let count = 1;
if (true) {
	let count = 2;
}
console.log(count)
ログイン後にコピー

1.3 に属します。宣言された let と const

をグループ化すると、コードの可読性が向上します。

//bad
let a = 1;
const obj = {};
let num = 0;
const page = 10;

//best
let a = 1;
let num = 0;
const obj = {};
const page = 10;
ログイン後にコピー

1.4 letとconstで宣言した変数を適切な場所に配置する

letとconstには【Temporary Dead Zones(TDZ)】という概念が与えられているため、それが決まっている 宣言した変数は変数昇格の対象にはならない。 var で宣言された変数はスコープの先頭に昇格されます。

2. オブジェクトを使用する

2.1 リテラルを使用する

eslint: no-new-object

//bad
const obj = new Object();

//good
const obj = {};
ログイン後にコピー

2.2 オブジェクトのメソッドは省略形です

// bad
const atom = {
  value: 1,

  addValue: function (value) {
    return atom.value + value;
  },
};

// good
const atom = {
  value: 1,

  addValue(value) {
    return atom.value + value;
  },
};
ログイン後にコピー

2.3 オブジェクトのプロパティも省略形を使用します

eslint: object-shorthand jscs: requireEnhancedObjectLiterals

const hello = "你好";

//bad
const obj = {
	hello:hello
};

//best
const obj = {
	hello,
};
ログイン後にコピー
2.4 hasOwnProperty、propertyIsEnumerable、isPrototypeOf などの Object.prototype メソッドを直接使用しないでください。

// bad
console.log(object.hasOwnProperty(key));

// good
console.log(Object.prototype.hasOwnProperty.call(object, key));

// best
const has = Object.prototype.hasOwnProperty; // cache the lookup once, in module scope.
const has = require('has');
…
console.log(has.call(object, key));
ログイン後にコピー

2.5 代わりにオブジェクトの浅いコピーを使用するのが最善です... Object.assign() の

// very bad
const original = { a: 1, b: 2 };
const copy = Object.assign(original, { c: 3 }); // this mutates `original`
delete copy.a; // so does this

// bad
const original = { a: 1, b: 2 };
const copy = Object.assign({}, original, { c: 3 }); // copy => { a: 1, b: 2, c: 3 }

// good
const original = { a: 1, b: 2 };
const copy = { ...original, c: 3 }; // copy => { a: 1, b: 2, c: 3 }

const { a, ...noA } = copy; // noA => { b: 2, c: 3 }
ログイン後にコピー

Object.assign() を使用すると、予期しない問題が発生します。

3. 配列を使用する

3.1 リテラルを使用して配列を作成する

eslint: no-array-constructor

// bad
const arr= new Array();

// good
const arr= [];
ログイン後にコピー

3.2 スプレッド演算子を使用して配列をコピーする

// bad
const arr= new Array();

// good
const arr= [];

// bad
const len = arr.length;
const arrCopy = [];
let i;

for (i = 0; i < len; i++) {
  arrCopy[i] = arr[i];
}

// good
const arrCopy = [...arr];
ログイン後にコピー

3.3 Array.from を使用してクラス配列を変換する配列

const list = document.getElementsByTagName("li");
const liNodes = Array.from(list);
ログイン後にコピー

4. 関数

4.1

関数式の代わりに関数宣言を使用する

なぜですか?なぜなら、関数で宣言された関数が最初に認識されて変数が巻き上げられる(巻き上げられる)のに対し、関数式は関数の参照変数名を巻き上げるだけ(つまり変数巻き上げ)だからです。

// bad
  const fn= function () {
  };

  // good
  function fn() {
  }
ログイン後にコピー

4.2 関数を関数以外のコード ブロック (if、else、while など) で宣言せず、その関数を変数に割り当てます。前者はエラーを報告しませんが、ブラウザーの解析方法は異なります。

// bad
if (ifLogin) {
  function test() {
    console.log(' logged');
  }
}

// good
let test;
if (ifLogin) {
  test = () => {
    console.log(' logged');
  };
}
ログイン後にコピー

4.3 引数の使用を避け、残りの構文を使用します...代わりに


その理由は、引数がクラス配列であり、配列固有のメソッドがなく、そして...渡すパラメータを明確にすることができるためです。それらは実数配列です。

// bad
  function myconcat() {
    const args = Array.prototype.slice.call(arguments);
    return args.join('');
  }

  // good
  function myconcat(...args) {
    return args.join('');
  }
ログイン後にコピー

5. アロー関数

5.1 関数式を使用する必要がある場合 (または匿名関数を渡す必要がある場合)、代わりにアロー関数を使用できます。その理由は、新しい関数を使用すると新しい関数スコープが作成され、this の現在のポイントが変更され、アロー関数は新しい this 実行環境を作成し、現在の環境の this を引き続き渡すことができるためです。書き方もより簡潔になります。

関数がより複雑な場合、アロー関数を使用すると問題が発生しやすくなります。代わりに関数宣言を使用できます。

// bad
  [1, 3, 5].map(function (x) {
    return x * x;
  });

  // good
  [1, 3, 5].map((x) => {
    return x * x;
  });
ログイン後にコピー

5.2

関数が 1 行に収まり、引数が 1 つだけの場合は、中括弧、括弧、および return を省略します。そうでない場合は、省略しないでください。

 // good
  [1, 2, 3].map(x => x * x);

  // good
  [1, 2, 3].reduce((total, n) => {
    return total + n;
  }, 0);
ログイン後にコピー

6. コンストラクター

6.1 プロトタイプ属性を直接操作することを避けるために、常にクラスを使用します


このように書くとより簡潔になります。

// bad
  function Queue(contents = []) {
    this._queue = [...contents];
  }
  Queue.prototype.pop = function() {
    const value = this._queue[0];
    this._queue.splice(0, 1);
    return value;
  }


  // good
  class Queue {
    constructor(contents = []) {
      this._queue = [...contents];
    }
    pop() {
      const value = this._queue[0];
      this._queue.splice(0, 1);
      return value;
    }
  }
ログイン後にコピー

7. モジュール開発

7.1 モジュールのアイデアを使用してビジネスを作成します。

モジュールを使用して論理的なビジネスを記述すると、コードがより統合され、スケーラブルになります。同様のライブラリには、seaJS と requireJS があります

7.2少使用通配符import

这样更能够确保你只有一个模块被你import,而那些不必要的模块不会被import,减少代码体积。

  // bad
  import * as webUI from './WEB';

  // good
  import webUI from './WEB';
ログイン後にコピー

8.使用高阶函数如map()和reduce()代替for~of

 const arr= [1, 2, 3, 4, 5];

  // bad
  let sum = 0;
  for (let num of arr) {
    sum += num;
  }

  sum === 15;

  // good
  let sum = 0;
  arr.forEach((num) => sum += num);
  sum === 15;

  // best (use the functional force)
  const sum = arr.reduce((total, num) => total + num, 0);
  sum === 15;
ログイン後にコピー

9.比较运算符

9.1优先使用===和!==而不是==和!=

===和!==不会进行强制类型转换,后者则会

9.2在做if条件判断时强制类型转换规则

  • 对象都会被转为true

  • null、undefined、NaN被转为false

  • 布尔值转为对应的布尔值

  • 数字中+0 -0 0都被计算为false,否则为true

  • 字符串   如果是“”空字符串,被计算为fasle,否则为true

相关推荐:

Web 前端代码规范

JavaScript代码规范和性能整理

HTML(5) 代码规范

以上が日々のjs開発仕様の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

おすすめのAI支援プログラミングツール4選 おすすめのAI支援プログラミングツール4選 Apr 22, 2024 pm 05:34 PM

おすすめのAI支援プログラミングツール4選

どのAIプログラマーが一番優れているでしょうか? Devin、Tongyi Lingma、SWE エージェントの可能性を探る どのAIプログラマーが一番優れているでしょうか? Devin、Tongyi Lingma、SWE エージェントの可能性を探る Apr 07, 2024 am 09:10 AM

どのAIプログラマーが一番優れているでしょうか? Devin、Tongyi Lingma、SWE エージェントの可能性を探る

Go 言語を使用してモバイル アプリケーションを開発する方法を学ぶ Go 言語を使用してモバイル アプリケーションを開発する方法を学ぶ Mar 28, 2024 pm 10:00 PM

Go 言語を使用してモバイル アプリケーションを開発する方法を学ぶ

最も人気のある 5 つの Go 言語ライブラリの概要: 開発に不可欠なツール 最も人気のある 5 つの Go 言語ライブラリの概要: 開発に不可欠なツール Feb 22, 2024 pm 02:33 PM

最も人気のある 5 つの Go 言語ライブラリの概要: 開発に不可欠なツール

VSCode について: このツールは何に使用されますか? VSCode について: このツールは何に使用されますか? Mar 25, 2024 pm 03:06 PM

VSCode について: このツールは何に使用されますか?

PHP は Web 開発におけるフロントエンドですか、それともバックエンドですか? PHP は Web 開発におけるフロントエンドですか、それともバックエンドですか? Mar 24, 2024 pm 02:18 PM

PHP は Web 開発におけるフロントエンドですか、それともバックエンドですか?

詳細な PyCharm アクティベーション チュートリアル: 開発ツールを簡単にアクティベートする 詳細な PyCharm アクティベーション チュートリアル: 開発ツールを簡単にアクティベートする Feb 20, 2024 pm 05:51 PM

詳細な PyCharm アクティベーション チュートリアル: 開発ツールを簡単にアクティベートする

Go 言語のフロントエンド テクノロジーの探求: フロントエンド開発の新しいビジョン Go 言語のフロントエンド テクノロジーの探求: フロントエンド開発の新しいビジョン Mar 28, 2024 pm 01:06 PM

Go 言語のフロントエンド テクノロジーの探求: フロントエンド開発の新しいビジョン

See all articles