搜尋
首頁web前端js教程JavaScript開發人員需要知道的簡寫技巧(高階篇)

這篇文章帶給大家的內容是關於JavaScript開發人員需要知道的簡寫技巧(高級篇),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

1、變數賦值

當一個變數的值賦給另一個變數時,首先需要確保原值不是 null、未定義的或空值。

可以透過寫一個包含多個條件的判斷語句來實現:

if (variable1 !== null || variable1 !== undefined || variable1 !== '') {
     let variable2 = variable1;
}

或簡寫為以下的形式:

const variable2 = variable1  || 'new';

可以將下面的程式碼貼到 es6console 中,自己測試:

let variable1;
let variable2 = variable1  || '';
console.log(variable2 === ''); // prints true
variable1 = 'foo';
variable2 = variable1  || '';
console.log(variable2); // prints foo

2、預設值賦值

如果預期參數是null 或未定義,則不需要寫六行程式碼來指派預設值。我們可以只使用一個簡短的邏輯運算符,只用一行程式碼就能完成相同的操作。

let dbHost;
if (process.env.DB_HOST) {
  dbHost = process.env.DB_HOST;
} else {
  dbHost = 'localhost';
}

簡寫為:

const dbHost = process.env.DB_HOST || 'localhost';

3、物件屬性

ES6 提供了一個很簡單的方法,來指派屬性的物件。如果屬性名稱與 key 名相同,則可以使用簡寫。

const obj = { x:x, y:y };

簡寫為:

const obj = { x, y };

4、箭頭函數

#經典函數很容易讀寫,但是如果把它們嵌套在其它函數中進行呼叫時,整個函數就會變得有些冗長和混亂。這時候可以使用箭頭函數來簡寫:

function sayHello(name) {
  console.log('Hello', name);
}
 
setTimeout(function() {
  console.log('Loaded')
}, 2000);
 
list.forEach(function(item) {
  console.log(item);
});

簡寫為:

sayHello = name => console.log('Hello', name);
setTimeout(() => console.log('Loaded'), 2000);
list.forEach(item => console.log(item));

5、隱含回傳值

傳回值是我們通常用來傳回函數最終結果的關鍵字。只有一個語句的箭頭函數,可以隱式傳回結果(函數必須省略括號({ }),以便省略回傳關鍵字)。

要傳回多行語句(例如物件文字),需要使用()而不是{ }來包裹函數體。這樣可以確保程式碼以單一語句的形式進行求值。

function calcCircumference(diameter) {
  return Math.PI * diameter
}

簡寫為:

calcCircumference = diameter => (
  Math.PI * diameter;
)

6、預設參數值

#可以使用 if 語句來定義函數參數的預設值。 ES6 中規定了可以在函數宣告中定義預設值。

function volume(l, w, h) {
  if (w === undefined)
    w = 3;
  if (h === undefined)
    h = 4;
  return l * w * h;
}

簡寫為:

volume = (l, w = 3, h = 4 ) => (l * w * h);
volume(2) //output: 24

7、模板字串

#過去我們習慣了使用「 」將多個變數轉換為字串,但是有沒有更簡單的方法呢?

ES6 提供了對應的方法,我們可以使用反引號和 $ { } 將變數合成一個字串。

const welcome = 'You have logged in as ' + first + ' ' + last + '.'
const db = 'http://' + host + ':' + port + '/' + database;

簡寫為:

const welcome = `You have logged in as ${first} ${last}`;
const db = `http://${host}:${port}/${database}`;

8、解構賦值

解構賦值是一種表達式,用於從陣列或物件中快速提取屬性值,並賦給定義的變數。

在程式碼簡寫方面,解構賦值能達到很好的效果。

const observable = require('mobx/observable');
const action = require('mobx/action');
const runInAction = require('mobx/runInAction');
const store = this.props.store;
const form = this.props.form;
const loading = this.props.loading;
const errors = this.props.errors;
const entity = this.props.entity;

簡寫為:

import { observable, action, runInAction } from 'mobx';
const { store, form, loading, errors, entity } = this.props;

甚至可以指定自己的變數名稱:

const { store, form, loading, errors, entity:contact } = this.props;

9、展開運算子

展開運算子是在ES6 中引入的,使用展開運算子能夠讓JavaScript 程式碼更加有效和有趣。

使用展開運算子可以取代某些陣列函數。

// joining arrays
const odd = [1, 3, 5];
const nums = [2 ,4 , 6].concat(odd);
 
// cloning arrays
const arr = [1, 2, 3, 4];
const arr2 = arr.slice( )

簡寫為:

// joining arrays
const odd = [1, 3, 5 ];
const nums = [2 ,4 , 6, ...odd];
console.log(nums); // [ 2, 4, 6, 1, 3, 5 ]
 
// cloning arrays
const arr = [1, 2, 3, 4];
const arr2 = [...arr];

和 concat( ) 功能不同的是,使用者可以使用擴充運算子在任何一個陣列中插入另一個陣列。

const odd = [1, 3, 5 ];
const nums = [2, ...odd, 4 , 6];

也可以將展開運算子和ES6 解構符號結合使用:

const { a, b, ...z } = { a: 1, b: 2, c: 3, d: 4 };
console.log(a) // 1
console.log(b) // 2
console.log(z) // { c: 3, d: 4 }

10、強制參數

預設情況下,如果不向函數參數傳值,那麼JavaScript 會將函數參數設為未定義。其它一些語言則會發出警告或錯誤。要執行參數分配,可以使用if語句拋出未定義的錯誤,或者可以利用「強制參數」。

function foo(bar) {
  if(bar === undefined) {
    throw new Error('Missing parameter!');
  }
  return bar;
}

簡寫為:

mandatory = ( ) => {
  throw new Error('Missing parameter!');
}
foo = (bar = mandatory( )) => {
  return bar;
}

11、Array.find

如果你曾經寫過普通 JavaScript 中的 find 函數,那麼你可能使用了 for 迴圈。在 ES6 中,介紹了一個名為 find()的新數組函數,可以實現 for 迴圈的簡寫。

const pets = [
  { type: 'Dog', name: 'Max'},
  { type: 'Cat', name: 'Karl'},
  { type: 'Dog', name: 'Tommy'},
]
function findDog(name) {
  for(let i = 0; i<pets.length><p>簡寫成:</p><pre class="brush:php;toolbar:false">pet = pets.find(pet => pet.type ==='Dog' && pet.name === 'Tommy');
console.log(pet); // { type: 'Dog', name: 'Tommy' }

12、Object [key]

雖然將foo.bar 寫成foo ['bar'] 是一種常見的做法,但這種做法構成了編寫可重複使用程式碼的基礎。

請考慮下面這個驗證函數的簡化範例:

function validate(values) {
  if(!values.first)
    return false;
  if(!values.last)
    return false;
  return true;
}
console.log(validate({first:'Bruce',last:'Wayne'})); // true

上面的函數完美的完成驗證工作。但是當有很多表單,則需要應用驗證,此時會有不同的欄位和規則。如果可以建立一個在運行時配置的通用驗證函數,會是一個好選擇。

// object validation rules
const schema = {
  first: {
    required:true
  },
  last: {
    required:true
  }
}
 
// universal validation function
const validate = (schema, values) => {
  for(field in schema) {
    if(schema[field].required) {
      if(!values[field]) {
        return false;
      }
    }
  }
  return true;
}
console.log(validate(schema, {first:'Bruce'})); // false
console.log(validate(schema, {first:'Bruce',last:'Wayne'})); // true

現在有了這個驗證函數,我們就可以在所有窗體中重複使用,而無需為每個窗體編寫自訂驗證函數。

13、雙位運算子

位元運算子是 JavaScript 初級教學的基本知識點,但是我們卻不常使用位元運算子。因為在不處理二進位的情況下,沒有人願意使用 1 和 0。

但是雙位運算子卻有一個很實用的案例。你可以使用雙位運算子來取代 Math.floor( )。雙重否定位元操作符的優點在於它執行相同的操作運行速度更快。

Math.floor(4.9) === 4  //true

簡寫為:

~~4.9 === 4  //true

以上就是對JavaScript開發人員需要知道的簡寫技巧(高級篇)的全部介紹,如果您想了解更多有關JavaScript影片教學,請關注PHP中文網。

以上是JavaScript開發人員需要知道的簡寫技巧(高階篇)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:csdn。如有侵權,請聯絡admin@php.cn刪除
Python vs. JavaScript:社區,圖書館和資源Python vs. JavaScript:社區,圖書館和資源Apr 15, 2025 am 12:16 AM

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C到JavaScript:所有工作方式從C/C到JavaScript:所有工作方式Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript引擎:比較實施JavaScript引擎:比較實施Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

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

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具