目錄
1.變數宣告" >1.變數宣告
1.1不要用var宣告變量,盡量使用const 
1.2如果需要宣告可變動的引用,那麼使用let代替var
1.3將宣告的let和const分組
1.4將let和const宣告的變數放在適當位置
2.使用物件
建立物件" >2.1使用字面量建立物件
2.2物件的方法是用簡寫形式
2.3物件的屬性也使用簡寫形式
" >函數表達式
4.3避免使用arguments,而是用rest語法... 替代
6.建構器
7.2少使用通配符import
8.使用高阶函数如map()和reduce()代替for~of
9.1优先使用===和!==而不是==和!=
9.2在做if条件判断时强制类型转换规则
首頁 web前端 js教程 日常js開發規範

日常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如果需要宣告可變動的引用,那麼使用let代替var

eslint: no-var jscs: disallowVar

#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被賦予了一種稱為【暫時性死區(Temporal 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不要直接使用Object.prototype的方法,如:hasOwnProperty, propertyIsEnumerable, isPrototypeOf 等

// 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使用函數宣告代替

函數表達式

為什麼?因為函數宣告的函數會先被識別,進行變數提升(hoisted),而函數表達式只會把函數的引用變數名稱提升(即變數提升)。

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

  // good
  function fn() {
  }
登入後複製

4.2不要再一個非函數程式碼區塊中(if,else,while等)宣告函數,  而是把那個函數賦給一個變數。即使前者不會報錯,但是瀏覽器的解析方式是不同的。

// bad
if (ifLogin) {
  function test() {
    console.log(&#39; logged&#39;);
  }
}

// good
let test;
if (ifLogin) {
  test = () => {
    console.log(&#39; logged&#39;);
  };
}
登入後複製

4.3避免使用arguments,而是用rest語法... 替代

原因是arguments是一個類別數組,沒有數組特有的方法,而...能夠明確你傳入的參數,並且是真正的陣列。

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

  // good
  function myconcat(...args) {
    return args.join(&#39;&#39;);
  }
登入後複製

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

如果一個函數適合用一行寫出並且只有一個參數,那就把花括號、圓括號和 return 都省略掉。如果不是,那就不要省略。
 // good
  [1, 2, 3].map(x => x * x);

  // good
  [1, 2, 3].reduce((total, n) => {
    return total + n;
  }, 0);
登入後複製

6.建構器

6.1總是使用class,避免直接操作prototype屬性

這樣寫比較為簡潔。

// 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 &#39;./WEB&#39;;

  // good
  import webUI from &#39;./WEB&#39;;
登入後複製

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

四款值得推薦的AI輔助程式工具 四款值得推薦的AI輔助程式工具 Apr 22, 2024 pm 05:34 PM

這個AI輔助程式工具在這個AI快速發展的階段,挖掘出了一大批好用的AI輔助程式工具。 AI輔助程式設計工具能夠提升開發效率、提升程式碼品質、降低bug率,是現代軟體開發過程中的重要助手。今天大姚給大家分享4款AI輔助程式工具(而且都支援C#語言),希望對大家有幫助。 https://github.com/YSGStudyHards/DotNetGuide1.GitHubCopilotGitHubCopilot是一款AI編碼助手,可幫助你更快、更省力地編寫程式碼,從而將更多精力集中在問題解決和協作上。 Git

AI程式設計師哪家強?探索Devin、通靈靈碼和SWE-agent的潛力 AI程式設計師哪家強?探索Devin、通靈靈碼和SWE-agent的潛力 Apr 07, 2024 am 09:10 AM

2022年3月3日,距離世界首個AI程式設計師Devin誕生不足一個月,普林斯頓大學的NLP團隊開發了一個開源AI程式設計師SWE-agent。它利用GPT-4模型在GitHub儲存庫中自動解決問題。 SWE-agent在SWE-bench測試集上的表現與Devin相似,平均耗時93秒,解決了12.29%的問題。 SWE-agent透過與專用終端交互,可以開啟、搜尋文件內容,使用自動語法檢查、編輯特定行,以及編寫和執行測試。 (註:以上內容為原始內容微調,但保留了原文中的關鍵訊息,未超過指定字數限制。)SWE-A

學習如何利用Go語言開發行動應用程式 學習如何利用Go語言開發行動應用程式 Mar 28, 2024 pm 10:00 PM

Go語言開發行動應用程式教學隨著行動應用程式市場的不斷蓬勃發展,越來越多的開發者開始探索如何利用Go語言開發行動應用程式。作為一種簡潔高效的程式語言,Go語言在行動應用開發中也展現了強大的潛力。本文將詳細介紹如何利用Go語言開發行動應用程序,並附上具體的程式碼範例,幫助讀者快速入門並開始開發自己的行動應用程式。一、準備工作在開始之前,我們需要準備好開發環境和工具。首

五大熱門Go語言庫總表:開發必備利器 五大熱門Go語言庫總表:開發必備利器 Feb 22, 2024 pm 02:33 PM

五大熱門Go語言庫總結:開發必備利器,需要具體程式碼範例Go語言自從誕生以來,受到了廣泛的關注和應用。作為一門新興的高效、簡潔的程式語言,Go的快速發展離不開豐富的開源程式庫的支援。本文將介紹五大熱門的Go語言庫,這些庫在Go開發中扮演了至關重要的角色,為開發者提供了強大的功能和便利的開發體驗。同時,為了更好地理解這些庫的用途和功能,我們會結合具體的程式碼範例進行講

Android開發最適合的Linux發行版是哪一個? Android開發最適合的Linux發行版是哪一個? Mar 14, 2024 pm 12:30 PM

Android開發是一項繁忙而又令人興奮的工作,而選擇適合的Linux發行版來進行開發則顯得尤為重要。在眾多的Linux發行版中,究竟哪一個最適合Android開發呢?本文將從幾個方面來探討這個問題,並給出具體的程式碼範例。首先,我們來看看目前流行的幾個Linux發行版:Ubuntu、Fedora、Debian、CentOS等,它們都有各自的優點和特點。

Go語言前端技術探秘:前端開發新視野 Go語言前端技術探秘:前端開發新視野 Mar 28, 2024 pm 01:06 PM

Go語言作為一種快速、高效的程式語言,在後端開發領域廣受歡迎。然而,很少有人將Go語言與前端開發聯繫起來。事實上,使用Go語言進行前端開發不僅可以提高效率,還能為開發者帶來全新的視野。本文將探討使用Go語言進行前端開發的可能性,並提供具體的程式碼範例,幫助讀者更了解這一領域。在傳統的前端開發中,通常會使用JavaScript、HTML和CSS來建立使用者介面

了解VSCode:這款工具到底是用來做什麼的? 了解VSCode:這款工具到底是用來做什麼的? Mar 25, 2024 pm 03:06 PM

《了解VSCode:這款工具到底是用來做什麼的? 》身為程式設計師,無論是初學者或資深開發者,都離不開程式碼編輯工具的使用。在眾多編輯工具中,VisualStudioCode(簡稱VSCode)作為一款開源、輕量級、強大的程式碼編輯器備受開發者歡迎。那麼,VSCode到底是用來做什麼的呢?本文將深入探討VSCode的功能和用途,並提供具體的程式碼範例,以幫助讀者

PHP在Web開發中是屬於前端還是後端? PHP在Web開發中是屬於前端還是後端? Mar 24, 2024 pm 02:18 PM

PHP在Web開發中是屬於後端。 PHP是一種伺服器端腳本語言,主要用於處理伺服器端的邏輯,產生動態網頁內容。與前端技術相比,PHP更多地用於與資料庫互動、處理使用者請求以及生成頁面內容等後端操作。接下來透過具體的程式碼範例來說明PHP在後端開發中的應用。首先,我們來看一個簡單的PHP程式碼範例,用於連接資料庫並查詢資料:

See all articles