您好,登錄后才能下訂單哦!
小編給大家分享一下JavaScript中簡(jiǎn)寫(xiě)的技巧有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
當(dāng)將一個(gè)變量的值賦給另一個(gè)變量時(shí),首先需要確保原值不是 null、未定義的或空值。
可以通過(guò)編寫(xiě)一個(gè)包含多個(gè)條件的判斷語(yǔ)句來(lái)實(shí)現(xiàn):
if (variable1 !== null || variable1 !== undefined || variable1 !== '') { let variable2 = variable1; }
或者簡(jiǎn)寫(xiě)為以下的形式:
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
如果預(yù)期參數(shù)是 null 或未定義,則不需要寫(xiě)六行代碼來(lái)分配默認(rèn)值。我們可以只使用一個(gè)簡(jiǎn)短的邏輯運(yùn)算符,只用一行代碼就能完成相同的操作。
let dbHost; if (process.env.DB_HOST) { dbHost = process.env.DB_HOST; } else { dbHost = 'localhost'; }
簡(jiǎn)寫(xiě)為:
const dbHost = process.env.DB_HOST || 'localhost';
ES6 提供了一個(gè)很簡(jiǎn)單的辦法,來(lái)分配屬性的對(duì)象。如果屬性名與 key 名相同,則可以使用簡(jiǎn)寫(xiě)。
const obj = { x:x, y:y };
簡(jiǎn)寫(xiě)為:
const obj = { x, y };
經(jīng)典函數(shù)很容易讀寫(xiě),但是如果把它們嵌套在其它函數(shù)中進(jìn)行調(diào)用時(shí),整個(gè)函數(shù)就會(huì)變得有些冗長(zhǎng)和混亂。這時(shí)候可以使用箭頭函數(shù)來(lái)簡(jiǎn)寫(xiě):
function sayHello(name) { console.log('Hello', name); } setTimeout(function() { console.log('Loaded') }, 2000); list.forEach(function(item) { console.log(item); });
簡(jiǎn)寫(xiě)為:
sayHello = name => console.log('Hello', name); setTimeout(() => console.log('Loaded'), 2000); list.forEach(item => console.log(item));
返回值是我們通常用來(lái)返回函數(shù)最終結(jié)果的關(guān)鍵字。只有一個(gè)語(yǔ)句的箭頭函數(shù),可以隱式返回結(jié)果(函數(shù)必須省略括號(hào)({ }),以便省略返回關(guān)鍵字)。
要返回多行語(yǔ)句(例如對(duì)象文本),需要使用()而不是{ }來(lái)包裹函數(shù)體。這樣可以確保代碼以單個(gè)語(yǔ)句的形式進(jìn)行求值。
function calcCircumference(diameter) { return Math.PI * diameter }
簡(jiǎn)寫(xiě)為:
calcCircumference = diameter => ( Math.PI * diameter; )
可以使用 if 語(yǔ)句來(lái)定義函數(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)寫(xiě)為:
volume = (l, w = 3, h = 4 ) => (l * w * h); volume(2) //output: 24
過(guò)去我們習(xí)慣了使用“+”將多個(gè)變量轉(zhuǎn)換為字符串,但是有沒(méi)有更簡(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)寫(xiě)為:
const welcome = `You have logged in as ${first} ${last}`; const db = `http://${host}:${port}/${database}`;
解構(gòu)賦值是一種表達(dá)式,用于從數(shù)組或?qū)ο笾锌焖偬崛傩灾担①x給定義的變量。
在代碼簡(jiǎn)寫(xiě)方面,解構(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)寫(xiě)為:
import { observable, action, runInAction } from 'mobx'; const { store, form, loading, errors, entity } = this.props;
甚至可以指定自己的變量名:
const { store, form, loading, errors, entity:contact } = this.props;
展開(kāi)運(yùn)算符是在 ES6 中引入的,使用展開(kāi)運(yùn)算符能夠讓 JavaScript 代碼更加有效和有趣。
使用展開(kāi)運(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)寫(xiě)為:
// 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];
也可以將展開(kāi)運(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 }
默認(rèn)情況下,如果不向函數(shù)參數(shù)傳值,那么 JavaScript 會(huì)將函數(shù)參數(shù)設(shè)置為未定義。其它一些語(yǔ)言則會(huì)發(fā)出警告或錯(cuò)誤。要執(zhí)行參數(shù)分配,可以使用if語(yǔ)句拋出未定義的錯(cuò)誤,或者可以利用“強(qiáng)制參數(shù)”。
function foo(bar) { if(bar === undefined) { throw new Error('Missing parameter!'); } return bar; }
簡(jiǎn)寫(xiě)為:
mandatory = ( ) => { throw new Error('Missing parameter!'); } foo = (bar = mandatory( )) => { return bar; }
如果你曾經(jīng)編寫(xiě)過(guò)普通 JavaScript 中的 find 函數(shù),那么你可能使用了 for 循環(huán)。在 ES6 中,介紹了一種名為 find()的新數(shù)組函數(shù),可以實(shí)現(xiàn) for 循環(huán)的簡(jiǎn)寫(xiě)。
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)寫(xiě)為:
pet = pets.find(pet => pet.type ==='Dog' && pet.name === 'Tommy'); console.log(pet); // { type: 'Dog', name: 'Tommy' }
雖然將 foo.bar 寫(xiě)成 foo ['bar'] 是一種常見(jiàn)的做法,但是這種做法構(gòu)成了編寫(xiě)可重用代碼的基礎(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ù),我們就可以在所有窗體中重用,而無(wú)需為每個(gè)窗體編寫(xiě)自定義驗(yàn)證函數(shù)。
位操作符是 JavaScript 初級(jí)教程的基本知識(shí)點(diǎn),但是我們卻不常使用位操作符。因?yàn)樵诓惶幚矶M(jìn)制的情況下,沒(méi)有人愿意使用 1 和 0。
但是雙位操作符卻有一個(gè)很實(shí)用的案例。你可以使用雙位操作符來(lái)替代 Math.floor( )。雙否定位操作符的優(yōu)勢(shì)在于它執(zhí)行相同的操作運(yùn)行速度更快。
Math.floor(4.9) === 4 //true
簡(jiǎn)寫(xiě)為:
~~4.9 === 4 //true
以上是“JavaScript中簡(jiǎn)寫(xiě)的技巧有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。