摘要:如果屬性名與名相同,則可以使用簡(jiǎn)寫。其它一些語(yǔ)言則會(huì)發(fā)出警告或錯(cuò)誤。在中,介紹了一種名為的新數(shù)組函數(shù),可以實(shí)現(xiàn)循環(huán)的簡(jiǎn)寫。總結(jié)上述是一些常用的簡(jiǎn)寫技巧,如果有其它未提及的簡(jiǎn)寫技巧,也歡迎大家補(bǔ)充。
本文來源于多年的 JavaScript 編碼技術(shù)經(jīng)驗(yàn),適合所有正在使用 JavaScript 編程的開發(fā)人員閱讀。
本文的目的在于幫助大家更加熟練的運(yùn)用 JavaScript 語(yǔ)言來進(jìn)行開發(fā)工作。
文章將分成初級(jí)篇和高級(jí)篇兩部分,分別進(jìn)行介紹。
初級(jí)篇1、三目運(yùn)算符
下面是一個(gè)很好的例子,將一個(gè)完整的 if 語(yǔ)句,簡(jiǎn)寫為一行代碼。
const x = 20; let answer; if (x > 10) { answer = "greater than 10"; } else { answer = "less than 10"; }
簡(jiǎn)寫為:
const answer = x > 10 ? "greater than 10" : "less than 10";
2、循環(huán)語(yǔ)句
當(dāng)使用純 JavaScript(不依賴外部庫(kù),如 jQuery 或 lodash)時(shí),下面的簡(jiǎn)寫會(huì)非常有用。
for (let i = 0; i < allImgs.length; i++)
簡(jiǎn)寫為:
for (let index of allImgs)
下面是遍歷數(shù)組 forEach 的簡(jiǎn)寫示例:
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
3、聲明變量
在函數(shù)開始之前,對(duì)變量進(jìn)行賦值是一種很好的習(xí)慣。在申明多個(gè)變量時(shí):
let x; let y; let z = 3;
可以簡(jiǎn)寫為:
let x, y, z=3;
4、if 語(yǔ)句
在使用 if 進(jìn)行基本判斷時(shí),可以省略賦值運(yùn)算符。
if (likeJavaScript === true)
簡(jiǎn)寫為:
if (likeJavaScript)
5、十進(jìn)制數(shù)
可以使用科學(xué)計(jì)數(shù)法來代替較大的數(shù)據(jù),如可以將 10000000 簡(jiǎn)寫為 1e7。
for (let i = 0; i < 10000; i++) { }
簡(jiǎn)寫為:
for (let i = 0; i < 1e7; i++) { }
6、多行字符串
如果需要在代碼中編寫多行字符串,就像下面這樣:
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. "
但是還有一個(gè)更簡(jiǎn)單的方法,只使用引號(hào):
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.`高級(jí)篇
1、變量賦值
當(dāng)將一個(gè)變量的值賦給另一個(gè)變量時(shí),首先需要確保原值不是 null、未定義的或空值。
可以通過編寫一個(gè)包含多個(gè)條件的判斷語(yǔ)句來實(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è)語(yǔ)句的箭頭函數(shù),可以隱式返回結(jié)果(函數(shù)必須省略括號(hào)({ }),以便省略返回關(guān)鍵字)。
要返回多行語(yǔ)句(例如對(duì)象文本),需要使用()而不是{ }來包裹函數(shù)體。這樣可以確保代碼以單個(gè)語(yǔ)句的形式進(jìn)行求值。
function calcCircumference(diameter) { return Math.PI * diameter }
簡(jiǎn)寫為:
calcCircumference = diameter => ( Math.PI * diameter; )
6、默認(rèn)參數(shù)值
可以使用 if 語(yǔ)句來定義函數(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ū)ο笾锌焖偬崛傩灾担①x給定義的變量。
在代碼簡(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è)置為未定義。其它一些語(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)寫為:
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簡(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 //trueJavaScript 開發(fā)工具推薦SpreadJS 純前端表格控件是基于 HTML5 的 JavaScript 電子表格和網(wǎng)格功能控件,提供了完備的公式引擎、排序、過濾、輸入控件、數(shù)據(jù)可視化、Excel 導(dǎo)入/導(dǎo)出等功能,適用于 .NET、Java 和移動(dòng)端等各平臺(tái)在線編輯類 Excel 功能的表格程序開發(fā)。
總結(jié)上述是一些常用的 JavaScript 簡(jiǎn)寫技巧,如果有其它未提及的簡(jiǎn)寫技巧,也歡迎大家補(bǔ)充。
原文鏈接:https://www.sitepoint.com/sho...
轉(zhuǎn)載請(qǐng)注明出自:葡萄城控件
關(guān)于葡萄城葡萄城成立于1980年,是全球最大的控件提供商,世界領(lǐng)先的企業(yè)應(yīng)用定制工具、企業(yè)報(bào)表和商業(yè)智能解決方案提供商,為超過75%的全球財(cái)富500強(qiáng)企業(yè)提供服務(wù)。葡萄城于1988年在中國(guó)設(shè)立研發(fā)中心,在全球化產(chǎn)品的研發(fā)過程中,不斷適應(yīng)中國(guó)市場(chǎng)的本地需求,并為軟件企業(yè)和各行業(yè)的信息化提供優(yōu)秀的軟件工具和咨詢服務(wù)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/89279.html
摘要:否則,將返回空數(shù)組的長(zhǎng)度。該提案目前處于第階段,作為一項(xiàng)實(shí)驗(yàn)性功能。轉(zhuǎn)換為布爾值除了常規(guī)的布爾值和之外,還將所有其他值視為或。這也可以用于將布爾值轉(zhuǎn)換為數(shù)字,如下所示在某些上下文中,將被解釋為連接操作符,而不是加法操作符。 譯者:前端小智 原文:medium.com/@bretcamero… 當(dāng)我開始學(xué)習(xí)JavaScript時(shí),我把我在別人的代碼、code challenge網(wǎng)站以及我使用...
摘要:否則,將返回空數(shù)組的長(zhǎng)度。該提案目前處于第階段,作為一項(xiàng)實(shí)驗(yàn)性功能。轉(zhuǎn)換為布爾值除了常規(guī)的布爾值和之外,還將所有其他值視為或。這也可以用于將布爾值轉(zhuǎn)換為數(shù)字,如下所示在某些上下文中,將被解釋為連接操作符,而不是加法操作符。 當(dāng)我開始學(xué)習(xí)JavaScript時(shí),我把我在別人的代碼、code challenge網(wǎng)站以及我使用的教程之外的任何地方發(fā)現(xiàn)的每一個(gè)節(jié)省時(shí)間的技巧都列了一個(gè)清單。 在...
摘要:否則,將返回空數(shù)組的長(zhǎng)度。該提案目前處于第階段,作為一項(xiàng)實(shí)驗(yàn)性功能。轉(zhuǎn)換為布爾值除了常規(guī)的布爾值和之外,還將所有其他值視為或。這也可以用于將布爾值轉(zhuǎn)換為數(shù)字,如下所示在某些上下文中,將被解釋為連接操作符,而不是加法操作符。 當(dāng)我開始學(xué)習(xí)JavaScript時(shí),我把我在別人的代碼、code challenge網(wǎng)站以及我使用的教程之外的任何地方發(fā)現(xiàn)的每一個(gè)節(jié)省時(shí)間的技巧都列了一個(gè)清單。 在...
摘要:每天,數(shù)以百萬計(jì)的開發(fā)人員使用或來構(gòu)建項(xiàng)目。在本文中,我們將會(huì)介紹的個(gè)技巧來最大限度地利用從簡(jiǎn)單的快捷方式到自定義腳本。保存為開發(fā)依賴常規(guī),簡(jiǎn)寫。首先通過安裝開發(fā)依賴。在下一個(gè)也是最后一個(gè)技巧中,我們將合并。 為了保證的可讀性,本文采用意譯而非直譯。 每天,數(shù)以百萬計(jì)的開發(fā)人員使用 npm 或 yarn 來構(gòu)建項(xiàng)目。運(yùn)行npm init或npx create- response -ap...
本文主要介紹一些JS中用到的小技巧,可以在日常Coding中提升幸福度,將不定期更新~ 1. 類型強(qiáng)制轉(zhuǎn)換 1.1 string強(qiáng)制轉(zhuǎn)換為數(shù)字 可以用*1來轉(zhuǎn)化為數(shù)字(實(shí)際上是調(diào)用.valueOf方法)然后使用Number.isNaN來判斷是否為NaN,或者使用 a !== a 來判斷是否為NaN,因?yàn)?NaN !== NaN 32 * 1 // 32 ds * 1 ...
閱讀 1456·2021-11-24 09:39
閱讀 3635·2021-09-29 09:47
閱讀 1580·2021-09-29 09:34
閱讀 3077·2021-09-10 10:51
閱讀 2544·2019-08-30 15:54
閱讀 3224·2019-08-30 15:54
閱讀 880·2019-08-30 11:07
閱讀 1013·2019-08-29 18:36