最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

JavaScript開發(fā)人員需要知道的簡(jiǎn)寫技巧(高級(jí)篇)

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 19:29:45
文檔

JavaScript開發(fā)人員需要知道的簡(jiǎn)寫技巧(高級(jí)篇)

JavaScript開發(fā)人員需要知道的簡(jiǎn)寫技巧(高級(jí)篇):本篇文章給大家?guī)淼膬?nèi)容是關(guān)于JavaScript開發(fā)人員需要知道的簡(jiǎn)寫技巧(高級(jí)篇),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。1、變量賦值當(dāng)將一個(gè)變量的值賦給另一個(gè)變量時(shí),首先需要確保原值不是 null、未定義的或空值。可以通過編寫
推薦度:
導(dǎo)讀JavaScript開發(fā)人員需要知道的簡(jiǎn)寫技巧(高級(jí)篇):本篇文章給大家?guī)淼膬?nèi)容是關(guān)于JavaScript開發(fā)人員需要知道的簡(jiǎn)寫技巧(高級(jí)篇),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。1、變量賦值當(dāng)將一個(gè)變量的值賦給另一個(gè)變量時(shí),首先需要確保原值不是 null、未定義的或空值??梢酝ㄟ^編寫

本篇文章給大家?guī)淼膬?nèi)容是關(guān)于JavaScript開發(fā)人員需要知道的簡(jiǎn)寫技巧(高級(jí)篇),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。

1、變量賦值

當(dāng)將一個(gè)變量的值賦給另一個(gè)變量時(shí),首先需要確保原值不是 null、未定義的或空值。

可以通過編寫一個(gè)包含多個(gè)條件的判斷語句來實(shí)現(xiàn):

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

或者簡(jiǎn)寫為以下的形式:

const variable2 = variable1 || 'new';

可以將下面的代碼粘貼到 es6console 中,自己測(cè)試:

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

2、默認(rèn)值賦值

如果預(yù)期參數(shù)是 null 或未定義,則不需要寫六行代碼來分配默認(rèn)值。我們可以只使用一個(gè)簡(jiǎn)短的邏輯運(yùn)算符,只用一行代碼就能完成相同的操作。

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

簡(jiǎn)寫為:

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

3、對(duì)象屬性

ES6 提供了一個(gè)很簡(jiǎn)單的辦法,來分配屬性的對(duì)象。如果屬性名與 key 名相同,則可以使用簡(jiǎn)寫。

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

簡(jiǎn)寫為:

const obj = { x, y };

4、箭頭函數(shù)

經(jīng)典函數(shù)很容易讀寫,但是如果把它們嵌套在其它函數(shù)中進(jìn)行調(diào)用時(shí),整個(gè)函數(shù)就會(huì)變得有些冗長(zhǎng)和混亂。這時(shí)候可以使用箭頭函數(shù)來簡(jiǎn)寫:

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

簡(jiǎn)寫為:

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

5、隱式返回值

返回值是我們通常用來返回函數(shù)最終結(jié)果的關(guān)鍵字。只有一個(gè)語句的箭頭函數(shù),可以隱式返回結(jié)果(函數(shù)必須省略括號(hào)({ }),以便省略返回關(guān)鍵字)。

要返回多行語句(例如對(duì)象文本),需要使用()而不是{ }來包裹函數(shù)體。這樣可以確保代碼以單個(gè)語句的形式進(jìn)行求值。

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

簡(jiǎn)寫為:

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

6、默認(rèn)參數(shù)值

可以使用 if 語句來定義函數(shù)參數(shù)的默認(rèn)值。ES6 中規(guī)定了可以在函數(shù)聲明中定義默認(rèn)值。

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

簡(jiǎn)寫為:

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

7、模板字符串

過去我們習(xí)慣了使用“+”將多個(gè)變量轉(zhuǎn)換為字符串,但是有沒有更簡(jiǎn)單的方法呢?

ES6 提供了相應(yīng)的方法,我們可以使用反引號(hào)和 $ { } 將變量合成一個(gè)字符串。

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

簡(jiǎn)寫為:

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

8、解構(gòu)賦值

解構(gòu)賦值是一種表達(dá)式,用于從數(shù)組或?qū)ο笾锌焖偬崛傩灾?,并賦給定義的變量。

在代碼簡(jiǎn)寫方面,解構(gòu)賦值能達(dá)到很好的效果。

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;

簡(jiǎn)寫為:

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

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

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

9、展開運(yùn)算符

展開運(yùn)算符是在 ES6 中引入的,使用展開運(yùn)算符能夠讓 JavaScript 代碼更加有效和有趣。

使用展開運(yùn)算符可以替換某些數(shù)組函數(shù)。

// 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( )

簡(jiǎn)寫為:

// 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( ) 功能不同的是,用戶可以使用擴(kuò)展運(yùn)算符在任何一個(gè)數(shù)組中插入另一個(gè)數(shù)組。

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

也可以將展開運(yùn)算符和 ES6 解構(gòu)符號(hào)結(jié)合使用:

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、強(qiáng)制參數(shù)

默認(rèn)情況下,如果不向函數(shù)參數(shù)傳值,那么 JavaScript 會(huì)將函數(shù)參數(shù)設(shè)置為未定義。其它一些語言則會(huì)發(fā)出警告或錯(cuò)誤。要執(zhí)行參數(shù)分配,可以使用if語句拋出未定義的錯(cuò)誤,或者可以利用“強(qiáng)制參數(shù)”。

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

簡(jiǎn)寫為:

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

11、Array.find

如果你曾經(jīng)編寫過普通 JavaScript 中的 find 函數(shù),那么你可能使用了 for 循環(huán)。在 ES6 中,介紹了一種名為 find()的新數(shù)組函數(shù),可以實(shí)現(xiàn) for 循環(huán)的簡(jiǎn)寫。

const pets = [
 { type: 'Dog', name: 'Max'},
 { type: 'Cat', name: 'Karl'},
 { type: 'Dog', name: 'Tommy'},
]
function findDog(name) {
 for(let i = 0; i<pets.length; ++i) {
 if(pets[i].type === 'Dog' && pets[i].name === name) {
 return pets[i];
 }
 }
}

簡(jiǎn)寫為:

pet = pets.find(pet => pet.type ==='Dog' && pet.name === 'Tommy');
console.log(pet); // { type: 'Dog', name: 'Tommy' }

12、Object [key]

雖然將 foo.bar 寫成 foo ['bar'] 是一種常見的做法,但是這種做法構(gòu)成了編寫可重用代碼的基礎(chǔ)。

請(qǐng)考慮下面這個(gè)驗(yàn)證函數(shù)的簡(jiǎn)化示例:

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

上面的函數(shù)完美的完成驗(yàn)證工作。但是當(dāng)有很多表單,則需要應(yīng)用驗(yàn)證,此時(shí)會(huì)有不同的字段和規(guī)則。如果可以構(gòu)建一個(gè)在運(yùn)行時(shí)配置的通用驗(yàn)證函數(shù),會(huì)是一個(gè)好選擇。

// 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

現(xiàn)在有了這個(gè)驗(yàn)證函數(shù),我們就可以在所有窗體中重用,而無需為每個(gè)窗體編寫自定義驗(yàn)證函數(shù)。

13、雙位操作符

位操作符是 JavaScript 初級(jí)教程的基本知識(shí)點(diǎn),但是我們卻不常使用位操作符。因?yàn)樵诓惶幚矶M(jìn)制的情況下,沒有人愿意使用 1 和 0。

但是雙位操作符卻有一個(gè)很實(shí)用的案例。你可以使用雙位操作符來替代 Math.floor( )。雙否定位操作符的優(yōu)勢(shì)在于它執(zhí)行相同的操作運(yùn)行速度更快。

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

簡(jiǎn)寫為:

~~4.9 === 4 //true

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

JavaScript開發(fā)人員需要知道的簡(jiǎn)寫技巧(高級(jí)篇)

JavaScript開發(fā)人員需要知道的簡(jiǎn)寫技巧(高級(jí)篇):本篇文章給大家?guī)淼膬?nèi)容是關(guān)于JavaScript開發(fā)人員需要知道的簡(jiǎn)寫技巧(高級(jí)篇),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。1、變量賦值當(dāng)將一個(gè)變量的值賦給另一個(gè)變量時(shí),首先需要確保原值不是 null、未定義的或空值??梢酝ㄟ^編寫
推薦度:
標(biāo)簽: 開發(fā) js javascript
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top