App下載

2021 第一期 日常開(kāi)發(fā) 26 個(gè)常見(jiàn)的 JavaScript 代碼優(yōu)化方案

猿友 2021-02-25 15:43:13 瀏覽數(shù) (14069)
反饋

2021 第一期。

本篇文章整理了在日常開(kāi)發(fā)中 30 個(gè)常見(jiàn)的 JavaScript 代碼優(yōu)化方案。

1、NUll、Undefined、''檢查

我們?cè)趧?chuàng)建新變量賦予一個(gè)存在的變量值的時(shí)候,并不希望賦予? null ?或 ?undefined?,我們可以采用一下簡(jiǎn)潔的賦值方式。

if(test !== null || test !== undefined || test !== ''){
  let a1 = test;
}

// 優(yōu)化后
let a1 = test || ''

2、null 值檢查并賦予默認(rèn)值

let test = null;
let a1 = test || '';

3、undefined 值檢查并賦予默認(rèn)值

let test = undefined;
let a1 = test || '';

4、空值合并運(yùn)算符(??)

空值合并操作符(??)是一個(gè)邏輯操作符,當(dāng)左側(cè)的操作數(shù)為 ?null? 或者 ?undefined? 時(shí),返回其右側(cè)操作數(shù),否則返回左側(cè)操作數(shù)。

const test= null ?? 'default string';
console.log(test);

console.log(test); // expected output: "default string"

const test = 0 ?? 42;
console.log(test); // expected output: 0

5、聲明變量

當(dāng)我們想要聲明多個(gè)共同類型或者相同值的變量時(shí),我們可以采用一下簡(jiǎn)寫(xiě)的方式。

let test1;
let test2 = 0;

//  優(yōu)化后
let test1, test2 = 0;

6、if 多條件判斷

當(dāng)我們進(jìn)行多個(gè)條件判斷時(shí),我們可以采用數(shù)組 ?includes? 的方式來(lái)實(shí)現(xiàn)簡(jiǎn)寫(xiě)。

if(test === '1' || test === '2' || test === '3' || test === '4'){
  // 邏輯
}

// 優(yōu)化后
if(['1','2','3','4'].includes(test)){
  // 邏輯處理
}

7、if...else 的簡(jiǎn)寫(xiě)

當(dāng)存在一層或兩層 ?if...else?嵌套時(shí),我們可以使用三元運(yùn)算符來(lái)簡(jiǎn)寫(xiě)。

let test = null;
if(a > 10) {
  test = true;
} else {
  test = false;
}

// 優(yōu)化后
let test = a > 10 ? true : false;
// 或者
let test = a > 10;

8、多變量賦值

當(dāng)我們想給多個(gè)變量賦不同的值的時(shí)候,我們可以采用一下簡(jiǎn)潔的速記方案。

let a = 1;
let b = 2;
let c = 3;

// 優(yōu)化
let [a, b, c] = [1, 2, 3];

9、算術(shù)運(yùn)算簡(jiǎn)寫(xiě)優(yōu)化

當(dāng)我們?cè)陂_(kāi)發(fā)中經(jīng)常用到算數(shù)運(yùn)算符時(shí),我們可以使用一下方式進(jìn)行優(yōu)化和簡(jiǎn)寫(xiě)。

let a = 1;
a = a + 1;
a = a - 1;
a = a * 2;

// 優(yōu)化
a++;
a--;
a *= 2;

10、有效值判斷

我們經(jīng)常會(huì)在開(kāi)發(fā)中用到的,在這也簡(jiǎn)單整理一下。

if (test1 === true)
if (test1 !== "")  
if (test1 !== null)

// 優(yōu)化
if (test1)

11、多條件(&&)判斷

我們通常在項(xiàng)目中遇到條件判斷后跟函數(shù)執(zhí)行,我們可以使用一下簡(jiǎn)寫(xiě)方式。

if (test) {
 foo(); 
} 

//優(yōu)化
test && foo();

12、多個(gè)比較 return

在 ?return? 的語(yǔ)句中使用比較,可以將其進(jìn)行縮寫(xiě)的形式如下。

let test;
function checkReturn() {
    if (!(test === undefined)) {
        return test;
    } else {
        return foo('test');
    }
}

// 優(yōu)化
function checkReturn() {
    return test || foo('test');
}

13、Switch 的縮寫(xiě)

遇到如下形式的 ?switch? 語(yǔ)句,我們可以將其條件和表達(dá)式以鍵值對(duì)的形式存儲(chǔ)。

switch (type) {
  case 1:
    test1();
  break;
  case 2:
    test2();
  break;
  case 3:
    test();
  break;
  // ......
}

// 優(yōu)化
var obj = {
  1: test1,
  2: test2,
  3: test
};

obj[type] && obj[type]();

14、for 循環(huán)縮寫(xiě)

for (let i = 0; i < arr.length; i++)

// 優(yōu)化
for (let i in arr) or  for (let i of arr)

15、箭頭函數(shù)

function add() {
  return a + b;
}

// 優(yōu)化
const add = (a, b) => a + b;

16、短函數(shù)調(diào)用

const data1 = [1, 2, 3];
const data2 = [4 ,5 , 6].concat(data1);

// 優(yōu)化
const data2 = [4 ,5 , 6, ...data1];

17、數(shù)組合并與克隆

const data1 = [1, 2, 3];
const data2 = [4 ,5 , 6].concat(data1);

// 優(yōu)化
const data2 = [4 ,5 , 6, ...data1];

數(shù)組克?。?/p>

const data1 = [1, 2, 3];
const data2 = test1.slice()

// 優(yōu)化
const data1 = [1, 2, 3];
const data2 = [...data1];

18、字符串模版

const test = 'hello ' + text1 + '.'

// 優(yōu)化
const test = `hello ${text}.` 

19、數(shù)據(jù)解構(gòu)

const a1 = this.data.a1;
const a2 = this.data.a2;
const a3 = this.data.a3;

// 優(yōu)化
const { a1, a2, a3 } = this.data;

20、數(shù)組查找特定值

數(shù)組按照索引來(lái)查找特定值,我們可以通過(guò)邏輯位運(yùn)算符 ?? 來(lái)代替判斷。

?“~”?運(yùn)算符(位非)用于對(duì)一個(gè)二進(jìn)制操作數(shù)逐位進(jìn)行取反操作

if(arr.indexOf(item) > -1) 

// 優(yōu)化
if(~arr.indexOf(item))

// 或
if(arr.includes(item))

21、Object.entries()

const data = { a1: 'abc', a2: 'cde', a3: 'efg' };
Object.entries(data);

/** 輸出:
[ [ 'a1', 'abc' ],
  [ 'a2', 'cde' ],
  [ 'a3', 'efg' ]
]
**/

22、Object.values()

我們可以通過(guò) ?Object.values()? 將對(duì)象的內(nèi)容轉(zhuǎn)化為數(shù)組。如下:

const data = { a1: 'abc', a2: 'cde' };
Object.values(data);

/** 輸出:
[ 'abc', 'cde']
**/

23、求平方

Math.pow(2,3); 

// 優(yōu)化
2**3;

24、指數(shù)簡(jiǎn)寫(xiě)

for (var i = 0; i < 10000; i++)

// 優(yōu)化
for (var i = 0; i < 1e4; i++) {

25、對(duì)象屬性簡(jiǎn)寫(xiě)

let key1 = '1'; 
let key2 = 'b';
let obj = {key1: key1, key2: key2}; 

// 簡(jiǎn)寫(xiě)
let obj = {
  key1, 
  key2
};

26、字符串轉(zhuǎn)數(shù)字

let a1 = parseInt('100'); 
let a2 = parseFloat('10.1'); 

// 簡(jiǎn)寫(xiě) 
let a1 = +'100'; 
let a2 = +'10.1';

推薦微課:JavaScript微課,JavaScript基礎(chǔ)實(shí)戰(zhàn),JavaScript面向?qū)ο缶幊?/a>


2 人點(diǎn)贊