最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuā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)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

史上最全JavaScript常用的簡(jiǎn)寫(xiě)技巧(推薦)

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:32:31
文檔

史上最全JavaScript常用的簡(jiǎn)寫(xiě)技巧(推薦)

史上最全JavaScript常用的簡(jiǎn)寫(xiě)技巧(推薦):JavaScript 是屬于網(wǎng)絡(luò)的腳本語(yǔ)言!被數(shù)百萬(wàn)計(jì)的網(wǎng)頁(yè)用來(lái)改進(jìn)設(shè)計(jì)、驗(yàn)證表單、檢測(cè)瀏覽器、創(chuàng)建cookies,以及更多的應(yīng)用。同時(shí)很容易使用,所以越來(lái)越多的開(kāi)發(fā)者選擇js代碼來(lái)實(shí)現(xiàn)自己想要的效果,但開(kāi)發(fā)過(guò)程中,為了更高的效率和良好的代碼規(guī)范要求,我們不得
推薦度:
導(dǎo)讀史上最全JavaScript常用的簡(jiǎn)寫(xiě)技巧(推薦):JavaScript 是屬于網(wǎng)絡(luò)的腳本語(yǔ)言!被數(shù)百萬(wàn)計(jì)的網(wǎng)頁(yè)用來(lái)改進(jìn)設(shè)計(jì)、驗(yàn)證表單、檢測(cè)瀏覽器、創(chuàng)建cookies,以及更多的應(yīng)用。同時(shí)很容易使用,所以越來(lái)越多的開(kāi)發(fā)者選擇js代碼來(lái)實(shí)現(xiàn)自己想要的效果,但開(kāi)發(fā)過(guò)程中,為了更高的效率和良好的代碼規(guī)范要求,我們不得

JavaScript 是屬于網(wǎng)絡(luò)的腳本語(yǔ)言!被數(shù)百萬(wàn)計(jì)的網(wǎng)頁(yè)用來(lái)改進(jìn)設(shè)計(jì)、驗(yàn)證表單、檢測(cè)瀏覽器、創(chuàng)建cookies,以及更多的應(yīng)用。同時(shí)很容易使用,所以越來(lái)越多的開(kāi)發(fā)者選擇js代碼來(lái)實(shí)現(xiàn)自己想要的效果,但開(kāi)發(fā)過(guò)程中,為了更高的效率和良好的代碼規(guī)范要求,我們不得不知曉js一些常用的簡(jiǎn)寫(xiě)技巧,如下我?guī)痛蠹艺砹讼?,一起進(jìn)來(lái)看看吧~

1. 三元運(yùn)算符

當(dāng)你想用一行代碼來(lái)寫(xiě)if...else語(yǔ)句的時(shí)候,使用三元操作符是非常好的選擇,例如:

const x = 20;
let answer;
if (x > 10) {
 answer = 'is greater';
} else {
 answer = 'is lesser';
}

可以簡(jiǎn)寫(xiě)為:

const answer = x > 10 ? 'is greater' : 'is lesser';

也可以嵌套if語(yǔ)句:

const big = x > 10 ? " greater 10" : x

2. 簡(jiǎn)寫(xiě)短路求值

當(dāng)給一個(gè)變量分配另一個(gè)值的時(shí)候,你可能想確定初值不是null,undefined或空值。這時(shí),你可以寫(xiě)一個(gè)多重條件的if語(yǔ)句:

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

或者可以使用短路求值的方法:

const variable2 = variable1  || 'new';

3. 簡(jiǎn)寫(xiě)變量聲明

在定義函數(shù)的時(shí)候,你可能需要先聲明多個(gè)變量,例如:

let x;
let y;
let z = 3;

這時(shí),你可以使用簡(jiǎn)寫(xiě)的方式節(jié)省很多時(shí)間和空間,即同時(shí)聲明多個(gè)變量:

let x, y, z=3;

4. 簡(jiǎn)寫(xiě) if 執(zhí)行條件

這可能微不足道,但值得一提。在你做if條件檢查的時(shí)候,其賦值操作可以省略,例如:

if (likeJavaScript === true)

可以簡(jiǎn)寫(xiě)為:

if (likeJavaScript)

只有當(dāng)likeJavaScript是真值的時(shí)候,以上兩個(gè)語(yǔ)句才可以替換。如果判斷假值,例如:

let a;
if ( a !== true ) {
 // do something...
}

可以簡(jiǎn)寫(xiě)為:

let a;
if ( !a ) {
 // do something...
}

5. 簡(jiǎn)寫(xiě) JavaScript 循環(huán)方法

當(dāng)你想使用純 javascript 而不依賴外庫(kù)(例如jQuery)的時(shí)候,這是非常有用的。

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

可以簡(jiǎn)寫(xiě)為:

for (let index in allImgs)

也可以使用Array.forEach:

function logArrayElements(element, index, array) {
 console.log("a[" + index + "] = " + element);
}
[2, 5, 9].forEach(logArrayElements);
// logs:
// a[0] = 2
// a[1] = 5
// a[2] = 9

6. 短路求值

如果想通過(guò)判斷參數(shù)是否為null或者undefined來(lái)分配默認(rèn)值的話,我們不需要寫(xiě)六行代碼,而是可以使用一個(gè)短路邏輯運(yùn)算符,只用一行代碼來(lái)完成相同的操作。例如:

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';

7. 十進(jìn)制指數(shù)

當(dāng)數(shù)字的尾部為很多的零時(shí)(如10000000),咱們可以使用指數(shù)(1e7)來(lái)代替這個(gè)數(shù)字,例如:

for (let i = 0; i < 10000; i++) {}

可以簡(jiǎn)寫(xiě)為:

for (let i = 0; i < 1e7; i++) {}

// 下面都是返回 true
1e0 === 1;
1e1 === 10;
1e2 === 100;
1e3 === 1000;
1e4 === 10000;
1e5 === 100000;

8. 簡(jiǎn)寫(xiě)對(duì)象屬性

在 JavaScript 中定義對(duì)象很簡(jiǎn)單,而且ES6提供了一個(gè)更簡(jiǎn)單的分配對(duì)象屬性的方法。如果屬性名與key值相同,例如:

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

則可以簡(jiǎn)寫(xiě)為:

const obj = { x, y };

9. 簡(jiǎn)寫(xiě)箭頭函數(shù)

傳統(tǒng)函數(shù)很容易讓人理解和編寫(xiě),但是當(dāng)它嵌套在另一個(gè)函數(shù)中的時(shí)候,它就會(huì)變得冗長(zhǎng)和混亂。例如:

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

這時(shí),可以簡(jiǎn)寫(xiě)為:

sayHello = name => console.log('Hello', name);

setTimeout(() => console.log('Loaded'), 2000);

list.forEach(item => console.log(item));

10. 簡(jiǎn)寫(xiě)隱式返回值

我們經(jīng)常使用return語(yǔ)句來(lái)返回函數(shù)最終結(jié)果,僅有一行聲明語(yǔ)句的箭頭函數(shù)能隱式返回其值(這時(shí)函數(shù)必須省略{}以便省略return關(guān)鍵字)。如果想要返回多行語(yǔ)句,則需要使用()包圍函數(shù)體。例如:

function calcCircumference(diameter) {
 return Math.PI * diameter
}
var func = function func() {
 return { foo: 1 };
};

可以簡(jiǎn)寫(xiě)為:

calcCircumference = diameter => (
 Math.PI * diameter;
)
var func = () => ({ foo: 1 });

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

我們經(jīng)??梢允褂胕f語(yǔ)句來(lái)為函數(shù)中的參數(shù)定義默認(rèn)值。但是在ES6中,咱們可以在函數(shù)本身聲明參數(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

12. 字符串模板

你是不是厭倦了使用+將多個(gè)變量轉(zhuǎn)換為字符串?有沒(méi)有更簡(jiǎn)單的方法呢?如果你能夠使用ES6,那么很幸運(yùn),你僅需使用反引號(hào)并將變量置于${}之中即可。例如:

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}`;

13. 簡(jiǎn)寫(xiě)賦值方法

如果你正在使用任何流行的 Web 框架,那么你很有可能使用數(shù)組或以對(duì)象本文的形式將數(shù)據(jù)在組件和 API 之間進(jìn)行通信。一旦數(shù)據(jù)對(duì)象到達(dá)一個(gè)組件,你就需要解壓它。例如:

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;

也可以分配變量名:

// 最后一個(gè)變量名為 contact

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

14. 簡(jiǎn)寫(xiě)多行字符串

如果你曾發(fā)現(xiàn)自己需要在代碼中編寫(xiě)多行字符串,那么這估計(jì)就是你編寫(xiě)它們的方法,即在輸出的多行字符串間用+來(lái)拼接:

const lorem = 'Lorem ipsum dolor sit amet, consectetur\n\t'
 + 'adipisicing elit, sed do eiusmod tempor incididunt\n\t'
 + 'ut labore et dolore magna aliqua. Ut enim ad minim\n\t'
 + 'veniam, quis nostrud exercitation ullamco laboris\n\t'
 + 'nisi ut aliquip ex ea commodo consequat. Duis aute\n\t'
 + 'irure dolor in reprehenderit in voluptate velit esse.\n\t'

但是如果使用反引號(hào),你就可以達(dá)到簡(jiǎn)寫(xiě)的目的:

const lorem = `Lorem ipsum dolor sit amet, consectetur
 adipisicing elit, sed do eiusmod tempor incididunt
 ut labore et dolore magna aliqua. Ut enim ad minim
 veniam, quis nostrud exercitation ullamco laboris
 nisi ut aliquip ex ea commodo consequat. Duis aute
 irure dolor in reprehenderit in voluptate velit esse.`

15. 擴(kuò)展運(yùn)算符

在ES6中,包括擴(kuò)展運(yùn)算符,它可以使你的操作更簡(jiǎn)單,例如:

// 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()函數(shù),你可以使用擴(kuò)展運(yùn)算符在一個(gè)數(shù)組中任意處插入另一個(gè)數(shù)組,例如:

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

也可以使用擴(kuò)展運(yùn)算符:

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 }

16. 強(qiáng)制參數(shù)

默認(rèn)情況下,如果不傳遞值,JavaScript 會(huì)將函數(shù)參數(shù)設(shè)置為undefined,而其他一些語(yǔ)言則會(huì)報(bào)出警告或錯(cuò)誤。想要執(zhí)行參數(shù)分配,則可以讓if語(yǔ)句拋出undefined的錯(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;
}

17. Array.find 簡(jiǎn)寫(xiě)

如果你曾負(fù)責(zé)編寫(xiě) JavaScript 中的find函數(shù),那么你很有可能使用了for循環(huán)。在此,介紹ES6中一個(gè)名為find()的數(shù)組函數(shù)。

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' }

18. 簡(jiǎn)寫(xiě) Object[key]

你知道Foo.bar也可以寫(xiě)成Foo['bar']嗎?起初,似乎沒(méi)有什么理由讓你這樣寫(xiě)。然而,這個(gè)符號(hào)給了你編寫(xiě)可重用代碼的基礎(chǔ)??紤]如下簡(jiǎn)化的驗(yàn)證函數(shù)示例:

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

這個(gè)函數(shù)可以完美的完成它的任務(wù)。但是,考慮一個(gè)場(chǎng)景,你有很多表單,你需要進(jìn)行驗(yàn)證,但有不同的字段和規(guī)則。那么,構(gòu)建一個(gè)可以在運(yùn)行時(shí)配置的通用驗(yàn)證函數(shù)不是很好嗎?

// 對(duì)象驗(yàn)證規(guī)則
const schema = {
 first: {
 required:true
 },
 last: {
 required:true
 }
}

// 通用驗(yàn)證函數(shù)
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è)可以在所有的form中重用的驗(yàn)證函數(shù),而無(wú)需為每個(gè)form編寫(xiě)其自定義的驗(yàn)證函數(shù)啦!

19. 簡(jiǎn)寫(xiě)雙重按位非運(yùn)算符

按位運(yùn)算符絕對(duì)是你初學(xué) JavaScript 時(shí)了解的但一直沒(méi)有用武之地的運(yùn)算符。因?yàn)槿绻惶幚矶M(jìn)制,誰(shuí)會(huì)沒(méi)事操作0和1呢?但是,雙重按位非運(yùn)算符非常實(shí)用,例如你可以使用它來(lái)替代floor()函數(shù),而且與其他相同的操作相比,按位運(yùn)算符的操作速度更快。

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

可以簡(jiǎn)寫(xiě)為:

~~4.9 === 4  //true

20. Suggest One of U?

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

文檔

史上最全JavaScript常用的簡(jiǎn)寫(xiě)技巧(推薦)

史上最全JavaScript常用的簡(jiǎn)寫(xiě)技巧(推薦):JavaScript 是屬于網(wǎng)絡(luò)的腳本語(yǔ)言!被數(shù)百萬(wàn)計(jì)的網(wǎng)頁(yè)用來(lái)改進(jìn)設(shè)計(jì)、驗(yàn)證表單、檢測(cè)瀏覽器、創(chuàng)建cookies,以及更多的應(yīng)用。同時(shí)很容易使用,所以越來(lái)越多的開(kāi)發(fā)者選擇js代碼來(lái)實(shí)現(xiàn)自己想要的效果,但開(kāi)發(fā)過(guò)程中,為了更高的效率和良好的代碼規(guī)范要求,我們不得
推薦度:
標(biāo)簽: 推薦 小技巧 技巧
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專(zhuān)題
Top