自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

新老手必備的34種JavaScript簡(jiǎn)寫優(yōu)化技術(shù)

開發(fā) 前端
開發(fā)者的生活總是在學(xué)習(xí)新的東西,跟上變化不應(yīng)該比現(xiàn)在更難,我的動(dòng)機(jī)是介紹所有JavaScript的最佳實(shí)踐,比如簡(jiǎn)寫功能,作為一個(gè)前端開發(fā)者,我們必須知道,讓我們的生活在2021年變得更輕松。

[[386483]]

原文:https://javascript.plainenglish.io/34-javascript-optimization-techniques-to-know-in-2021-d561afdf73c3

作者:Atit

開發(fā)者的生活總是在學(xué)習(xí)新的東西,跟上變化不應(yīng)該比現(xiàn)在更難,我的動(dòng)機(jī)是介紹所有JavaScript的最佳實(shí)踐,比如簡(jiǎn)寫功能,作為一個(gè)前端開發(fā)者,我們必須知道,讓我們的生活在2021年變得更輕松。

你可能做了很長(zhǎng)時(shí)間的JavaScript開發(fā),但有時(shí)你可能沒有更新最新的特性,這些特性可以解決你的問題,而不需要做或編寫一些額外的代碼。這些技術(shù)可以幫助您編寫干凈和優(yōu)化的JavaScript代碼。此外,這些主題可以幫助你為2021年的JavaScript面試做準(zhǔn)備。

1.如果有多個(gè)條件

我們可以在數(shù)組中存儲(chǔ)多個(gè)值,并且可以使用數(shù)組 include 方法。

  1. //Longhand 
  2. if (x === 'abc' || x === 'def' || x === 'ghi' || x ==='jkl') { 
  3.   //logic 
  4.  
  5. //Shorthand 
  6. if (['abc''def''ghi''jkl'].includes(x)) { 
  7.   //logic 

2.如果為真…否則簡(jiǎn)寫

這對(duì)于我們有 if-else 條件,里面不包含更大的邏輯時(shí),是一個(gè)較大的捷徑。我們可以簡(jiǎn)單的使用三元運(yùn)算符來實(shí)現(xiàn)這個(gè)簡(jiǎn)寫。

  1. // Longhand 
  2. let test: boolean; 
  3. if (x > 100) { 
  4.   test = true
  5. else { 
  6.   test = false
  7.  
  8. // Shorthand 
  9. let test = (x > 10) ? true : false
  10. //or we can use directly 
  11. let test = x > 10; 
  12. console.log(test); 

當(dāng)我們有嵌套條件時(shí),我們可以采用這種方式。

  1. let x = 300, 
  2. test2 = (x > 100) ? 'greater 100' : (x < 50) ? 'less 50' : 'between 50 and 100'
  3. console.log(test2); // "greater than 100" 

3.聲明變量

當(dāng)我們要聲明兩個(gè)具有共同值或共同類型的變量時(shí),可以使用此簡(jiǎn)寫形式。

  1. //Longhand  
  2. let test1; 
  3. let test2 = 1; 
  4.  
  5. //Shorthand  
  6. let test1, test2 = 1; 

4.Null, Undefined,空檢查

當(dāng)我們創(chuàng)建新的變量時(shí),有時(shí)我們想檢查我們引用的變量的值是否為空或undefined。JavaScript確實(shí)有一個(gè)非常好的簡(jiǎn)寫工具來實(shí)現(xiàn)這些功能。

  1. // Longhand 
  2. if (test1 !== null || test1 !== undefined || test1 !== '') { 
  3.     let test2 = test1; 
  4.  
  5. // Shorthand 
  6. let test2 = test1 || ''

5.null值檢查和分配默認(rèn)值

  1. let test1 = null
  2.     test2 = test1 || ''
  3.  
  4. console.log("null check", test2); // output will be "" 

6.undefined值檢查和分配默認(rèn)值

  1. let test1 = undefined, 
  2.     test2 = test1 || ''
  3.  
  4. console.log("undefined check", test2); // output will be "" 

正常值檢查

  1. let test1 = 'test'
  2.     test2 = test1 || ''
  3.  
  4. console.log(test2); // output'test' 

7.將值分配給多個(gè)變量

當(dāng)我們處理多個(gè)變量并希望將不同的值分配給不同的變量時(shí),此簡(jiǎn)寫技術(shù)非常有用。

  1. //Longhand  
  2. let test1, test2, test3; 
  3. test1 = 1; 
  4. test2 = 2; 
  5. test3 = 3; 
  6.  
  7. //Shorthand  
  8. let [test1, test2, test3] = [1, 2, 3]; 

8.賦值運(yùn)算符簡(jiǎn)寫

我們?cè)诰幊讨刑幚砗芏嗨阈g(shù)運(yùn)算符,這是將運(yùn)算符分配給JavaScript變量的有用技術(shù)之一。

  1. // Longhand 
  2. test1 = test1 + 1; 
  3. test2 = test2 - 1; 
  4. test3 = test3 * 20; 
  5.  
  6. // Shorthand 
  7. test1++; 
  8. test2--; 
  9. test3 *= 20; 

9.如果存在簡(jiǎn)寫

這是我們大家都在使用的常用簡(jiǎn)寫之一,但仍然值得一提。

  1. // Longhand 
  2. if (test1 === trueor if (test1 !== ""or if (test1 !== null
  3.  
  4. // Shorthand //it will check empty string,null and undefined too 
  5. if (test1) 

注意:如果test1有任何值,它將在if循環(huán)后進(jìn)入邏輯,該運(yùn)算符主要用于 null 或 undefined 的檢查。

10.多個(gè)條件的AND(&&)運(yùn)算符

如果僅在變量為 true 的情況下才調(diào)用函數(shù),則可以使用 && 運(yùn)算符。

  1. //Longhand  
  2. if (test1) { 
  3.  callMethod();  
  4. }  
  5.  
  6. //Shorthand  
  7. test1 && callMethod(); 

11.foreach循環(huán)簡(jiǎn)寫

這是迭代的常用簡(jiǎn)寫技術(shù)之一。

  1. // Longhand 
  2. for (var i = 0; i < testData.length; i++) 
  3.  
  4. // Shorthand 
  5. for (let i in testData) or  for (let i of testData) 

每個(gè)變量的數(shù)組

  1. function testData(element, index, array) { 
  2.   console.log('test[' + index + '] = ' + element); 
  3.  
  4. [11, 24, 32].forEach(testData); 
  5. // logs: test[0] = 11, test[1] = 24, test[2] = 32 

12.return中比較

我們也可以在return語(yǔ)句中使用比較。它將避免我們的5行代碼,并將它們減少到1行。

  1. // Longhand 
  2. let test; 
  3. function checkReturn() { 
  4.   if (!(test === undefined)) { 
  5.     return test; 
  6.   } else { 
  7.     return callMe('test'); 
  8.   } 
  9. var data = checkReturn(); 
  10. console.log(data); //output test 
  11. function callMe(val) { 
  12.     console.log(val); 
  13.  
  14. // Shorthand 
  15. function checkReturn() { 
  16.     return test || callMe('test'); 

13.箭頭函數(shù)

  1. //Longhand  
  2. function add(a, b) {  
  3.    return a + b;  
  4. }  
  5.  
  6. //Shorthand  
  7. const add = (a, b) => a + b; 

更多示例。

  1. function callMe(name) { 
  2.   console.log('Hello'name); 
  3. callMe = name => console.log('Hello'name); 

14.短函數(shù)調(diào)用

我們可以使用三元運(yùn)算符來實(shí)現(xiàn)這些功能。

  1. // Longhand 
  2. function test1() { 
  3.   console.log('test1'); 
  4. }; 
  5. function test2() { 
  6.   console.log('test2'); 
  7. }; 
  8. var test3 = 1; 
  9. if (test3 == 1) { 
  10.   test1(); 
  11. else { 
  12.   test2(); 
  13.  
  14. // Shorthand 
  15. (test3 === 1? test1:test2)(); 

15. Switch簡(jiǎn)寫

我們可以將條件保存在鍵值對(duì)象中,并可以根據(jù)條件使用。

  1. // Longhand 
  2. switch (data) { 
  3.   case 1: 
  4.     test1(); 
  5.   break; 
  6.  
  7.   case 2: 
  8.     test2(); 
  9.   break; 
  10.  
  11.   case 3: 
  12.     test(); 
  13.   break; 
  14.   // And so on... 
  15.  
  16. // Shorthand 
  17. var data = { 
  18.   1: test1, 
  19.   2: test2, 
  20.   3: test 
  21. }; 
  22.  
  23. data[something] && data[something](); 

16.隱式返回簡(jiǎn)寫

使用箭頭函數(shù),我們可以直接返回值,而不必編寫return語(yǔ)句。

  1. //longhand 
  2. function calculate(diameter) { 
  3.   return Math.PI * diameter 
  4.  
  5. //shorthand 
  6. calculate = diameter => ( 
  7.   Math.PI * diameter; 

17.小數(shù)基數(shù)指數(shù)

  1. // Longhand 
  2. for (var i = 0; i < 10000; i++) { ... } 
  3.  
  4. // Shorthand 
  5. for (var i = 0; i < 1e4; i++) { 

18.默認(rèn)參數(shù)值

  1. //Longhand 
  2. function add(test1, test2) { 
  3.   if (test1 === undefined) 
  4.     test1 = 1; 
  5.   if (test2 === undefined) 
  6.     test2 = 2; 
  7.   return test1 + test2; 
  8.  
  9. //shorthand 
  10. add = (test1 = 1, test2 = 2) => (test1 + test2); 
  11. add() //output: 3 

19.擴(kuò)展運(yùn)算符簡(jiǎn)寫

  1. //longhand 
  2.  
  3. // joining arrays using concat 
  4. const data = [1, 2, 3]; 
  5. const test = [4 ,5 , 6].concat(data); 
  6.  
  7. //shorthand 
  8.  
  9. // joining arrays 
  10. const data = [1, 2, 3]; 
  11. const test = [4 ,5 , 6, ...data]; 
  12. console.log(test); // [ 4, 5, 6, 1, 2, 3] 

對(duì)于克隆,我們也可以使用擴(kuò)展運(yùn)算符。

  1. //longhand 
  2.  
  3. // cloning arrays 
  4. const test1 = [1, 2, 3]; 
  5. const test2 = test1.slice() 
  6.  
  7. //shorthand 
  8.  
  9. // cloning arrays 
  10. const test1 = [1, 2, 3]; 
  11. const test2 = [...test1]; 

20.模板文字

如果您厭倦了在單個(gè)字符串中使用 + 來連接多個(gè)變量,那么這種簡(jiǎn)寫可以消除您的頭痛。

  1. //longhand 
  2. const welcome = 'Hi ' + test1 + ' ' + test2 + '.' 
  3.  
  4. //shorthand 
  5. const welcome = `Hi ${test1} ${test2}`; 

21.多行字符串簡(jiǎn)寫

當(dāng)我們?cè)诖a中處理多行字符串時(shí),可以使用以下功能:

  1. //longhand 
  2. const data = 'abc abc abc abc abc abc\n\t' 
  3.     + 'test test,test test test test\n\t' 
  4.  
  5. //shorthand 
  6. const data = `abc abc abc abc abc abc 
  7.          test test,test test test test` 

22.對(duì)象屬性分配

  1. let test1 = 'a';  
  2. let test2 = 'b'
  3.  
  4. //Longhand  
  5. let obj = {test1: test1, test2: test2};  
  6.  
  7. //Shorthand  
  8. let obj = {test1, test2}; 

23.將字符串轉(zhuǎn)換成數(shù)字

  1. //Longhand  
  2. let test1 = parseInt('123');  
  3. let test2 = parseFloat('12.3');  
  4.  
  5. //Shorthand  
  6. let test1 = +'123';  
  7. let test2 = +'12.3'

24.用解構(gòu)簡(jiǎn)寫

  1. //longhand 
  2. const test1 = this.data.test1; 
  3. const test2 = this.data.test2; 
  4. const test2 = this.data.test3; 
  5.  
  6. //shorthand 
  7. const { test1, test2, test3 } = this.data; 

25.用Array.find簡(jiǎn)寫

當(dāng)我們確實(shí)有一個(gè)對(duì)象數(shù)組并且我們想要根據(jù)對(duì)象屬性查找特定對(duì)象時(shí),find方法確實(shí)很有用。

  1. const data = [ 
  2.   { 
  3.     type: 'test1'
  4.     name'abc' 
  5.   }, 
  6.   { 
  7.     type: 'test2'
  8.     name'cde' 
  9.   }, 
  10.   { 
  11.     type: 'test1'
  12.     name'fgh' 
  13.   }, 
  14. function findtest1(name) { 
  15.   for (let i = 0; i < data.length; ++i) { 
  16.     if (data[i].type === 'test1' && data[i].name === name) { 
  17.       return data[i]; 
  18.     } 
  19.   } 
  20.  
  21. //Shorthand 
  22. filteredData = data.find(data => data.type === 'test1' && data.name === 'fgh'); 
  23. console.log(filteredData); // { type: 'test1'name'fgh' } 

26.查找條件簡(jiǎn)寫

如果我們有代碼來檢查類型,根據(jù)類型需要調(diào)用不同的方法,我們可以選擇使用多個(gè)else ifs或者switch,但是如果我們有比這更好的簡(jiǎn)寫方法呢?

  1. // Longhand 
  2. if (type === 'test1') { 
  3.   test1(); 
  4. else if (type === 'test2') { 
  5.   test2(); 
  6. else if (type === 'test3') { 
  7.   test3(); 
  8. else if (type === 'test4') { 
  9.   test4(); 
  10. else { 
  11.   throw new Error('Invalid value ' + type); 
  12.  
  13. // Shorthand 
  14. var types = { 
  15.   test1: test1, 
  16.   test2: test2, 
  17.   test3: test3, 
  18.   test4: test4 
  19. }; 
  20.   
  21. var func = types[type]; 
  22. (!func) && throw new Error('Invalid value ' + type); func(); 

27.按位索引簡(jiǎn)寫

當(dāng)我們遍歷數(shù)組以查找特定值時(shí),我們確實(shí)使用 indexOf() 方法,如果找到更好的方法該怎么辦?讓我們看看這個(gè)例子。

  1. //longhand 
  2. if(arr.indexOf(item) > -1) { // item found  
  3. if(arr.indexOf(item) === -1) { // item not found 
  4.  
  5. //shorthand 
  6. if(~arr.indexOf(item)) { // item found 
  7. if(!~arr.indexOf(item)) { // item not found 

按位(?)運(yùn)算符將返回除-1以外的任何值的真實(shí)值。否定它就像做 ~~ 一樣簡(jiǎn)單。另外,我們也可以使用 include() 函數(shù):

  1. if (arr.includes(item)) {  
  2.     // true if the item found 

28.Object.entries()

此函數(shù)有助于將對(duì)象轉(zhuǎn)換為對(duì)象數(shù)組。

  1. const data = { test1: 'abc', test2: 'cde', test3: 'efg' }; 
  2. const arr = Object.entries(data); 
  3. console.log(arr); 
  4. /** Output
  5. [ [ 'test1''abc' ], 
  6.   [ 'test2''cde' ], 
  7.   [ 'test3''efg' ] 
  8. **/ 

29.Object.values()

這也是ES8中引入的一項(xiàng)新功能,該功能執(zhí)行與 Object.entries() 類似的功能,但沒有關(guān)鍵部分:

  1. const data = { test1: 'abc', test2: 'cde' }; 
  2. const arr = Object.values(data); 
  3. console.log(arr); 
  4. /** Output
  5. 'abc''cde'
  6. **/ 

30.雙按位簡(jiǎn)寫

雙重NOT按位運(yùn)算符方法僅適用于32位整數(shù))

  1. // Longhand 
  2. Math.floor(1.9) === 1 // true 
  3.  
  4. // Shorthand 
  5. ~~1.9 === 1 // true 

31.重復(fù)一個(gè)字符串多次

要一次又一次地重復(fù)相同的字符,我們可以使用for循環(huán)并將它們添加到同一循環(huán)中,但是如果我們有一個(gè)簡(jiǎn)寫方法呢?

  1. //longhand  
  2. let test = '';  
  3. for(let i = 0; i < 5; i ++) {  
  4.   test += 'test ';  
  5. }  
  6. console.log(str); // test test test test test  
  7.  
  8. //shorthand  
  9. 'test '.repeat(5); 

32.在數(shù)組中查找最大值和最小值

  1. const arr = [1, 2, 3];  
  2. Math.max(…arr); // 3 
  3. Math.min(…arr); // 1 

33.從字符串中獲取字符

  1. let str = 'abc'
  2.  
  3. //Longhand  
  4. str.charAt(2); // c 
  5.  
  6. //Shorthand  
  7. Note: If we know the index of the array then we can directly use index insted of character.If we are not sure about index it can throw undefined 
  8. str[2]; // c 

34.數(shù)學(xué)指數(shù)冪函數(shù)的簡(jiǎn)寫

  1. //longhand 
  2. Math.pow(2,3); // 8 
  3.  
  4. //shorthand 
  5. 2**3 // 8 

本文轉(zhuǎn)載自微信公眾號(hào)「前端全棧開發(fā)者」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系前端全棧開發(fā)者公眾號(hào)。

 

責(zé)任編輯:武曉燕 來源: 前端全棧開發(fā)者
相關(guān)推薦

2021-01-09 22:50:16

JavaScript開發(fā)技術(shù)

2018-01-04 16:32:30

前端JavaScript

2025-03-11 07:00:00

數(shù)組JavaScript開發(fā)

2019-07-18 12:40:49

Java編程語(yǔ)言性能優(yōu)化

2021-01-31 23:56:49

JavaScript開發(fā)代碼

2017-11-27 17:09:38

前端Web圖像優(yōu)化

2020-07-14 10:50:23

CIOIT成本技術(shù)

2014-07-21 10:45:46

JavaScript

2025-01-07 10:48:08

2025-02-26 12:00:00

JavaScript代碼開發(fā)

2017-10-24 11:59:41

JavaScript

2010-08-04 14:17:54

白領(lǐng)

2010-09-28 15:12:27

Javascript

2023-06-06 15:31:13

JavaScript開發(fā)

2013-04-07 09:53:24

Windows系統(tǒng)優(yōu)化

2017-04-06 10:27:01

JavaScript基礎(chǔ)Java

2010-09-09 15:52:32

IT職場(chǎng)

2018-12-28 09:00:00

2020-06-12 08:34:37

React開發(fā)工具

2011-07-13 09:46:23

javaScript
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)