精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

你不可不知的 15 個 JavaScript 小貼士

開發 前端
對簡潔代碼的追求是一個持續的旅程,因為最佳實踐會隨著語言的不斷發展而不斷改善。這個過程也是軟件開發樂趣的一部分,學習最佳實踐有助于開發人員真正掌握編程語言。

在掌握如何編寫JavaScript代碼之后,那么就進階到實踐——如何真正地解決問題。我們需要更改JS代碼使其更簡單、更易于閱讀,因為這樣的程序更易于團隊成員之間緊密協作。

今天,我們將介紹15個最佳實踐技巧,可幫助簡化JavaScript代碼,易于其他開發人員理解,也使程序更具可讀性和可維護性。

1. 在頂部聲明并初始化變量

沒有什么比延遲聲明更能破壞可讀性的了。正如在開始工作之前準備好所有工具可以幫助簡化工作,在進入函數的細節之前聲明所有變量也可以讓程序更簡單。這也方便了我們以后調整變量名稱或值。

至于變量,最佳做法是在創建時初始化變量,以便你和你的團隊都可以確定沒有undefined的變量。

<script>
var x = 5;
</script>

2. 構建模塊化、專業化的函數

為了效率和可讀性,單個函數走天下是不可行的。所以我們在設計函數時,應該秉持著一個任務一個函數的原則。函數命名也應當匹配任務。

這樣做是不是更方便其他人閱讀代碼了呢?因為只處理一項任務,自然而然函數就會更簡單。甚至以后如果有需要,你和你的團隊還可以將此函數應用到其他程序。

請看下面的示例,改進后的代碼只看函數名和變量名,就可以清楚地知道任務目的。

function table (columns, rows, item){
creates table and searches it for the passed item
}

// compared to

function createTable (columns, rows){
//creates table
}

function searchTable (table.length, item) {
//searches table for the passed item
}

3. 識別并刪除重復代碼

有時,代碼中不可避免地會出現重復的代碼行。在這種情況下,應將重復的代碼改寫為函數,并在以前所有使用過這些代碼的地方改為調用函數。

這不但減少了視覺混亂,還有助于以后的調試,因為這樣一來團隊只需要查看函數,而不必一一檢查多處代碼。

<script>
var x = 5;
var y = 6;
var x = x*2
var y = y*2
</script>

<script>
var x = 5;
var y = 6;

function double (value){
return value*2;
}
double (x);
double(y);
</script>

4. 多注釋代碼

注釋是總結代碼片段目的的好方法,可以節省其他開發人員靠自己去確定代碼所需的時間。

如果代碼未完成注釋描述應完成的任務,還能及時捕獲可能的錯誤。一般來說,最好每個函數都有一條注釋。

不確定應不應該寫注釋?那就寫吧!如果太過雜亂,大不了以后刪除罷了。

//declares and initializes var x
<script>
var x = 5;
</script>

5. 謹防過度使用遞歸

注意:遞歸函數不要嵌套太多層。雖然說多層嵌套能一次解決許多問題,但我們很難一目了然。

為避免困惑,盡可能在不產生大量運行時成本的前提下,解放嵌套的遞歸函數。如果你有3+層的嵌套函數,那么你的同事可能很難跟上你的思路。

function1 (a,b){
  function2{
    function3{
    //this is too hard to follow and can likely be solved another way
    }
  }
}
</script>

6. 高效使用DOM操作

訪問DOM對于充分利用程序至關重要,但反復這樣做會導致視覺混亂并會減慢程序速度。

因此,我們最好訪問一次并進行緩存,以供稍后在變量中使用。然后有需要的話,直接訪問變量而不是訪問DOM。這個過程在視覺上更干凈、更高效。

注意:最佳做法是使用$符號標記DOM引用。

function accountInfo(){
var email = $("#accounts").find(".email").val();
var accountNumber = $("#accounts").find(".accountNumber").val();
}

// Contents cached to variable "accounts"

function accountInfo(){ var $accounts = $("#accounts"); 
var name = $accounts.find(".email").val(); 
var age = $accounts.find(".accountNumber").val();
}

7. 不惜一切代價避免全局變量

在JavaScript中,變量具有或全局或局部的作用域。作用域決定了在代碼何處定義和訪問變量。我們可以在程序中的任何位置,甚至函數之外定義全局變量。而局部變量僅用于定義的函數中。

如果存在同名的局部變量和全局變量,那么JavaScript將優先考慮局部變量并忽略全局變量。我們應避免使用全局變量,因為全局變量可能會意外覆蓋窗口變量,從而導致錯誤。

此外,過多的全局變量會減慢程序速度,因為在窗口關閉之前不會刪除全局變量,而局部變量會在函數完成后刪除。

<html>
      <script>
            var myVar = "my global variable"; // This variable is declared as global
            function localVariable( ) {
               var myVar = "my local variable";  // This is a locally declared variable
      </script>
   </body>
</html>

8. 使用速記符號(對象文字)

在JavaScript中設計對象或數組時,可以通過選擇速記符號來節省空間。實現方式是在聲明期間而不是之后設置對象或數組的屬性。

這樣做,我們就不必確定在每一行上設置了哪個對象或數組,從而使這部分代碼更易于閱讀。雖然是一個很小的變化,但隨著對象和數組逐漸變得復雜,絕對可以為你的團隊節省很多時間。

例如創建一個對象

普通寫法:

var computer = new Object();
    computer.caseColor = 'black';
    computer.brand = 'Dell';
    computer.value = 1200;
    computer.onSale = true;

速記寫法:

var computer = {
    caseColor: 'black';
    brand: 'Dell';
    value: 1200;
    onSale: true;
}

速記數組:

var computerBrands = [
'Dell',
'Apple',
'Lenovo',
'HP',
'Toshiba',
'Sony'
];

9. 使用嚴格模式捕獲靜默錯誤

與其他編程語言(如C++和Java)相比,JavaScript是一種語法非常寬松的語言。雖然這種寬大處理有助于在不引發錯誤的情況下運行代碼,但可能會導致隱形的錯誤。所以我們需要解決隱形的靜默錯誤,否則可能會導致意料之外的行為。

解決方案就是嚴格模式。包括兩項主要更改:

  • 以前可以通過編譯器的靜默錯誤現在會引發錯誤
  • 修復了阻止JavaScript優化代碼的錯誤
  • JavaScript Strict Code程序通常比非嚴格模式下的程序運行得更快。

或者在腳本部分的頂部,或者在所需功能之前(部分嚴格),添加'use strict';即可進入嚴格模式。

10. 設置默認值

創建對象時,可以為對象的部分或全部屬性設置默認值。這樣做不僅可確保每個屬性的值都不是undefined,而且還聲明了屬性所需的數據類型。此外,通過不為某些屬性設置默認值,還可以向團隊傳達對象正常運行不需要這些值的意思。

function logProperty({
    address = '111 11th Street, 11111', 
    unit,   //optional
    landlord = 'Sara', 
    tenant = 'Raj', 
    rent = 500, 
})

上面的代碼中,unit屬性可選,但其他四個屬性(預期的數據類型)都必須有默認值。為此,unit留空。

11. 使用模板字面量組合字符串

組合字符串可太麻煩了,尤其是在組合字符串和變量時。我們可以使用模板字面量(用反引號標記),簡化組合過程,因為模板字面量同時接受字符串和變量。

function greet(name) {
    return `Hi, ${name}`; //template literal
}
console.log(greet('Leo'));

注意,通過使用模板字面量,我們可以根據傳遞的名稱、組合字符串Hi和變量name傳遞的值來記錄對用戶的問候語。因此,此代碼打印:Hi, Leo

12. 使用includes解決存在性測試

測試數組中值是否存在是一個常見問題。值得慶幸的是,JavaScript有一個特殊的數組方法include()——如果數組包含搜索值,則返回布爾值。不用搜索數組,這是一種高效、易于閱讀的解決方案。

const sections = ['contact', 'shipping'];
 
function displayShipping(sections) {
    return sections.includes('shipping');
}
 
console.log(displayShipping(sections));

此外,還有indexOf()方法可用于檢查值以及查找索引。

13. 用falsy值縮短條件

在JavaScript的跨變量類型中,有一些值等效于false,包括:

  • 布爾值false
  • null
  • 0
  • NaN
  • ' '
  • " "

在 JavaScript 中,等效的==意味著兩個對象共享相同的值,但它們可能不是相同的類型。完全相同的===表示兩個對象類型相同,值也相同。這有什么用呢?

好吧,與其創建單獨的變量來保存布爾值,不如使用上述值作為默認值來報告false,如果沒有任何東西覆蓋的話。比如下面的例子,你需要檢查給定的員工是否接受過設備培訓(equipmentTraining)。這臺機器只需要最低級別的培訓,培訓水平并不重要。

因此,我們用if語句檢查equipmentTraining是否具有falsy值,即默認的' '。如果是,則執行if語句并返回員工未獲得授權。如果equipmentTraining包含除默認值以外的任何字符串,則表示具有truthy值,因此不會執行if語句。

const employee = {
    name: 'Eric',
    equipmentTraining: '',
}
 
if (!employee.equipmentTraining) {
    console.log('Not authorized to operate machinery');
}

14. 通過繼承共享方法

繼承涉及在類之間共享屬性或方法。下面的示例中使用super標簽實現繼承,允許FlashCoupon中的構造函數訪問Coupon中的父構造函數。只需定義一次方法(在父類中),即可增強代碼的可讀性。代碼也變得更加模塊化,因為繼承器類可以專門用于給定任務。

注意,頂部的代碼框建立了父類Coupon,其屬性和方法共享到FlashCoupon,如FlashCoupon在其最后一行調用getExpirationMessage方法時看到的那樣。

class Coupon {
  constructor(price, expiration) {
    this.price = price;
    this.expiration = expiration || 'Two Weeks';
  }
  getExpirationMessage() {
    return `This offer expires in ${this.expiration}`;
  }
}
export default Coupon;
import Coupon from './extend';
 
class FlashCoupon extends Coupon {
    constructor(price, expiration) {
        super(price);
        this.expiration = expiration || 'two hours';
    }
}
 
const flash = new FlashCoupon(10);
console.log(flash.getExpirationMessage());

15. 使用數組方法編寫較短的循環

最后一個小貼士,我們將深入探討數組優化的復雜性。循環是創建和填充數組的常用方法。但是,循環會導致代碼雜亂且難以閱讀。

因此,我們可以使用數組方法來實現類似的效果,例如for只需若干代碼行即可循環。以下面的for循環為例。

const prices = ['1.0', 'negotiable', '2.15'];
 
const formattedPrices = [];
for (let i = 0; i < prices.length; i++) {
    const price = parseFloat(prices[i]);
    if (price) {
        formattedPrices.push(price);
    }
}
console.log(formattedPrices);

我們可以通過三行map方法實現與上面代碼相同的效果。此方法創建了一個大小相等的數組,只有price屬性。然后使用parseFloat獲取價格的浮點值。

const prices = ['1.0', '2.15'];
const formattedPrices = prices.map(price => parseFloat(price));
console.log(formattedPrices)

總結

對簡潔代碼的追求是一個持續的旅程,因為最佳實踐會隨著語言的不斷發展而不斷改善。這個過程也是軟件開發樂趣的一部分,學習最佳實踐有助于開發人員真正掌握編程語言。大家加油!

責任編輯:武曉燕 來源: 前端新世界
相關推薦

2014-06-20 14:35:48

浪潮數據

2015-07-21 05:55:12

2021-01-28 10:17:54

人工智能AI機器學習

2023-07-06 14:08:54

ChatGPTLLM大型語言模型

2010-06-11 14:46:38

可路由協議

2020-09-28 07:56:16

Python3.9Python開發

2023-11-13 14:19:57

Golang編程語言

2023-09-20 09:00:00

2023-09-22 12:14:33

2021-08-12 16:02:22

Jupyter NotPython命令

2015-05-11 10:28:11

Web開發者編碼原則

2022-02-16 08:01:45

網絡安全趨勢

2020-11-30 13:12:04

Linux文本命令

2015-01-15 09:34:28

2023-06-15 11:01:43

Java工具開源

2015-06-10 10:56:50

iOS開發技巧

2015-07-28 16:48:04

云計算性能測試云服務

2016-08-26 13:09:28

網絡產品

2023-06-26 14:11:06

SQLC++語言

2024-09-23 21:05:45

點贊
收藏

51CTO技術棧公眾號

成人综合久久| 最近中文字幕免费mv2018在线| 亚洲情侣在线| xxxx日韩| 欧美一区免费| 日韩一区二区视频| 免费人成在线观看视频播放| 波多野结衣爱爱| 日本激情一区| 欧美一区二区三区免费在线看 | 国产一区二区免费在线观看| 天天看天天摸天天操| 国产午夜亚洲精品一级在线| 亚洲一区二区在线观看视频 | 成人在线综合网| 欧美中文字幕视频在线观看| 在线观看国产精品一区| 亚洲精品成人一区| 最新久久zyz资源站| 成人av资源| 亚洲图片欧美日韩| 激情综合网五月| 欧美二区在线观看| 日本福利视频在线| av中文字幕在线| 久久se精品一区精品二区| 国外成人在线直播| 91av在线免费| 国产一区二区三区免费在线| 亚洲成av人片在线观看| 色阁综合av| 亚洲第一页视频| 人人狠狠综合久久亚洲| 久久久久久国产精品三级玉女聊斋| 波多野吉衣中文字幕| 91国内外精品自在线播放| 亚洲一区在线播放| 深田咏美在线x99av| 东京干手机福利视频| 日韩av成人高清| 欧美大尺度在线观看| 亚洲乱码国产乱码精品精大量| 热久久久久久| 欧美日韩午夜视频在线观看| 糖心vlog在线免费观看| 精品久久av| 成人精品免费看| 国产九九精品视频| 91精品国产aⅴ一区二区| 色视频一区二区三区| 亚洲黄色片视频| 欧美日韩一区二区在线播放| 美女久久久久久久久久久| 亚洲av成人精品一区二区三区| 成人免费一区| 色婷婷久久久久swag精品| 黄色成人在线看| zzzwww在线看片免费| 亚洲国产视频在线| 男女激情免费视频| 操喷在线视频| 午夜a成v人精品| 国产xxxxx在线观看| 色偷偷色偷偷色偷偷在线视频| 亚洲成人免费视| 成人免费aaa| 欧美舌奴丨vk视频| 在线免费视频一区二区| 不卡的av中文字幕| 99er精品视频| 欧美成人伊人久久综合网| 亚洲av综合色区无码另类小说| 亚洲精品一二三**| 亚洲成人久久久久| 亚洲午夜久久久久久久久红桃| 欧美人成在线观看ccc36| 亚洲美女av在线| 日韩女同一区二区三区 | 无码小电影在线观看网站免费| 国产呦萝稀缺另类资源| 亚洲一区二区三区777| 国产高清精品软件丝瓜软件| 国产成人久久精品77777最新版本| 99re国产在线播放| 亚洲av成人无码网天堂| 国产日韩综合av| 正在播放精油久久| 92久久精品| 色激情天天射综合网| 手机免费av片| 国产精品欧美大片| 国产一区二区美女视频| 国产成人av免费在线观看| 韩国在线一区| 国产精品v日韩精品| 国产精品视频一区二区三区,| 国产精品一二三区| 免费国产在线精品一区二区三区| 国产一区精品| 玉米视频成人免费看| 欧美日韩激情视频在线观看| 国产精品麻豆成人av电影艾秋| 欧美成人在线直播| 公肉吊粗大爽色翁浪妇视频| 欧美日韩日本国产亚洲在线| 国产91色在线|免| 午夜精品久久久久久久99热黄桃| 久久综合999| 伊人网在线免费| 成人在线爆射| 精品久久免费看| 日本免费www| 激情一区二区| 91久久久亚洲精品| 天天影院图片亚洲| 亚洲精品免费在线播放| 91精品一区二区三区久久久久久 | 欧美日韩精品一区二区三区 | 午夜伦理精品一区| ,亚洲人成毛片在线播放| 成人不卡免费av| 一区二区三区四区久久| 另类激情视频| 欧美精品一区二区三区视频| 亚洲精品久久久久久国| 久久精选视频| 久久99欧美| 国产深夜视频在线观看| 欧美精品免费视频| 欧美人妻一区二区三区| 一本久道久久综合狠狠爱| 亚洲mm色国产网站| av资源网在线观看| 在线视频你懂得一区| 99re久久精品国产| 欧美精品不卡| 999国产在线| a黄色片在线观看| 欧美日韩在线播放一区| 亚洲色成人网站www永久四虎 | 粉色视频免费看| 国产欧美亚洲精品a| 2020国产精品视频| 日本波多野结衣在线| 亚洲综合免费观看高清在线观看| 老司机久久精品| 日韩一区欧美| 国产综合福利在线| 欧美成人三区| 国产日产精品久久久久久婷婷| 欧美国产乱子伦 | 精品美女在线播放| 欧美日韩激情在线观看| 国产在线麻豆精品观看| 亚洲小说欧美另类激情| 成人影院网站ww555久久精品| 日韩最新中文字幕电影免费看| 在线免费观看一区二区| 中文无字幕一区二区三区| 性猛交ⅹ×××乱大交| 日韩国产一区| 91九色国产在线| av在线免费网站| 欧美mv和日韩mv的网站| 国产一级一片免费播放| 99久久久精品免费观看国产蜜| 欧美日韩在线一| 天海翼亚洲一区二区三区| 国产999精品久久久| 午夜视频在线| 日韩一区二区三区电影在线观看| 久久久久成人片免费观看蜜芽| 成人精品免费视频| 黑鬼大战白妞高潮喷白浆| 欧美少妇xxxx| 91嫩草在线视频| 欧美24videosex性欧美| 亚洲精品久久久久中文字幕欢迎你 | 国产超碰在线播放| 久久精品影视| 国产日韩一区二区| 亚洲精品粉嫩美女一区| 日韩亚洲精品电影| 亚洲国产视频一区二区三区| 欧美视频不卡中文| 人妻无码一区二区三区免费| 国产精品亚洲人在线观看| 69堂免费视频| 成人vr资源| 国产乱子伦精品| 亚洲天堂1区| 久久久亚洲成人| 成人免费高清在线播放| 日韩欧美一级精品久久| 天堂中文字幕在线观看| 最新国产精品久久精品| 美国黄色一级毛片| 久久99深爱久久99精品| 人妻少妇精品无码专区二区| 日韩av有码| 精品国产_亚洲人成在线| 福利精品在线| 555www成人网| av毛片在线| 国产亚洲欧洲高清一区| 后进极品白嫩翘臀在线视频| 欧美在线免费视屏| 日韩av在线播放观看| 中文字幕人成不卡一区| 青青草福利视频| 国产69精品一区二区亚洲孕妇| 日韩肉感妇bbwbbwbbw| 亚洲精品视频啊美女在线直播| 吴梦梦av在线| 国产精品免费大片| 精品视频一区在线| 久久一级大片| 国产精品一区二区三区毛片淫片| av美女在线观看| 九色精品美女在线| 91欧美在线视频| 亚洲性色av| 亚洲精品视频免费| 国产自产一区二区| 欧美乱妇20p| a片在线免费观看| 欧美日韩免费网站| 日本一二三区不卡| 一区二区三区免费在线观看| 很污很黄的网站| 国产欧美一区二区精品婷婷| 大黑人交xxx极品hd| av色综合久久天堂av综合| 女同性αv亚洲女同志| 韩国毛片一区二区三区| 黑森林精品导航| 日韩主播视频在线| 黄色片视频在线播放| 亚洲一级在线| 一女被多男玩喷潮视频| 影音先锋久久资源网| 2022中文字幕| 欧美激情一区| 日本成人在线不卡| 欧美日韩亚洲一区| avav在线播放| 国产一区二区区别| 日韩国产欧美精品| 国产日韩视频在线| 日本在线视频一区| 欧美一二区在线观看| 日韩影片在线播放| 日韩三级在线| 午夜啪啪福利视频| 国产伊人精品| 欧美交换配乱吟粗大25p| 欧美久久成人| 亚洲熟妇无码一区二区三区| 亚洲国产午夜| 国产a级一级片| 老**午夜毛片一区二区三区| 好男人www社区| 久久er99热精品一区二区| 国产高清av片| 成人精品国产免费网站| 国产又粗又长又爽| 久久精品视频一区二区三区| 黄色片在线观看免费| 国产精品久久久久久久久动漫 | 色资源在线观看| 亚洲小视频在线| 巨大荫蒂视频欧美大片| 欧美激情中文网| 成人爱爱网址| 成人黄色中文字幕| 国产精品中文字幕制服诱惑| 久久综合毛片| 日韩一区二区中文| 在线综合视频播放| 中文字幕一区二区三区人妻在线视频 | 中文字幕一区二区三区视频| 青草影院在线观看| 欧美日韩国产综合视频在线观看中文| 懂色av蜜臀av粉嫩av喷吹| 制服丝袜亚洲色图| 婷婷五月综合激情| 日韩一区二区三区国产| 超碰在线中文字幕| 国产精品视频26uuu| 中文一区二区三区四区| 日本精品免费| 亚洲无吗在线| 91极品尤物在线播放国产| 国产99久久久精品| 成人国产精品久久久网站| 亚洲伦在线观看| 国产超碰人人爽人人做人人爱| 欧美日韩成人综合天天影院 | 91在线云播放| 糖心vlog免费在线观看| 欧美日韩亚洲成人| 国产又粗又猛又黄又爽| 日韩精品中文在线观看| 好了av在线| 国产成人精品久久久| 天堂精品在线视频| 亚洲国产精品一区在线观看不卡 | 欧美激情乱人伦| 久久国内精品| 欧美一区视久久| 影音先锋久久精品| 中文字幕日韩久久| 国产日韩欧美精品电影三级在线| 久久免费精彩视频| 8v天堂国产在线一区二区| 欧美美女色图| 97久久精品国产| 国产高清视频一区二区| 神马一区二区影院| 麻豆精品网站| 手机在线成人av| 一级精品视频在线观看宜春院 | 亚洲日韩第一页| 先锋av资源站| 欧美国产极速在线| 亚洲人成777| 亚欧洲精品在线视频免费观看| 99av国产精品欲麻豆| 女同性αv亚洲女同志| √…a在线天堂一区| 日批视频免费观看| 亚洲视频在线视频| 色戒汤唯在线观看| 久久国产一区二区| 亚洲另类自拍| 精品熟女一区二区三区| 亚洲一区二区四区蜜桃| www.av日韩| 久久国产精品久久久久| av日韩久久| 在线观看成人av| 精品中文字幕一区二区小辣椒| 手机看片日韩av| 欧美艳星brazzers| 黄色在线免费观看大全| 欧洲永久精品大片ww免费漫画| 欧美三级午夜理伦三级在线观看| 国产精品一色哟哟| 国产不卡在线一区| 精品午夜福利视频| 欧美成人精精品一区二区频| 成人福利在线观看视频| 亚洲a成v人在线观看| 亚洲精品成人| 亚洲性图第一页| 午夜天堂影视香蕉久久| 丰满少妇一级片| 2019日本中文字幕| 亚洲性视频大全| 91蝌蚪视频在线观看| 国产精品理论片| 国产绿帽一区二区三区| 欧美另类高清videos| 超碰精品在线| 少妇人妻在线视频| 久久久久久免费网| 又色又爽又黄无遮挡的免费视频| 久久精品久久久久久| 精品伊人久久| 草草久久久无码国产专区| 久久久无码精品亚洲日韩按摩| а中文在线天堂| 久久视频中文字幕| 国产一区二区三区亚洲| 大香煮伊手机一区| 国产精品欧美久久久久无广告 | 精品国产亚洲一区二区麻豆| 国产91在线观看丝袜| 在线观看亚洲网站| 精品久久国产字幕高潮| 在线黄色的网站| 亚洲一区二区不卡视频| 懂色av中文一区二区三区| 国产成人亚洲精品自产在线 | 九义人在线观看完整免费版电视剧| 成人乱人伦精品视频在线观看| 韩日欧美一区| 国产精品免费无码| 欧美一级生活片| 伊伊综合在线| 精品国产一区二区三区在线| 91丨九色丨蝌蚪富婆spa| 91精品国产综合久| 韩国三级电影久久久久久| 色综合久久网| 波多野结衣视频播放| 欧美日本一区二区在线观看| 草草视频在线| 伊人久久青草| 91美女福利视频|