若是使用if...else
語句,那麼這是一個很好節省代碼的方式。數組
Longhand:框架
const x = 20; let answer; if (x > 10) { answer = 'is greater'; } else { answer = 'is lesser'; }
Shorthand:less
const answer = x > 10 ? 'is greater' : 'is lesser';
const big = x > 10 ? " greater 10" : x
分配一個變量值到另外一個變量的時候,你可能想要確保變量不是null
、undefined
或空。你能夠寫一個有多個if
的條件語句或者Short-circuit Evaluation。函數
if (variable1 !== null || variable1 !== undefined || variable1 !== '') { let variable2 = variable1; }
Shorthand:ui
const variable2 = variable1 || 'new'; let variable1; let variable2 = variable1 || ''; console.log(variable2 === ''); // prints true variable1 = 'foo'; variable2 = variable1 || ''; console.log(variable2); // prints foo
在函數中聲明變量時,像下面這樣同時聲明多個變量能夠節省你大量的時間和空間:this
Longhand:lua
let x;
let y;
let x = 3;
Shorthand:spa
let x, y, z=3;
這多是微不足道的,但值得說起。作「若是檢查」時,賦值操做符有時能夠省略。code
Longhand:orm
if (likeJavaScript === true)
Shorthand:
if (likeJavaScript)
若是你只想要原生的JavaScript,而不想依賴於jQuery或Lodash這樣的外部庫,那這個小技巧是很是有用的。
Longhand:
for (let i = 0; i < allImgs.length; i++)
Shorthand:
for (let index in allImgs)
若是參數是null
或者是undefined
,咱們能夠簡單的使用一個Short-circuit邏輯運算,實現一行代碼替代六行代碼的寫法。
Longhand:
let dbHost; if (process.env.DB_HOST) { dbHost = process.env.DB_HOST; } else { dbHost = 'localhost'; }
Shorthand:
const dbHost = process.env.DB_HOST || 'localhost';
你可能看過這個。它本質上是一個寫數字的奇特寫法,就是一個數字後面有不少個0
。例如1e7
本質至關於10000000
(1
的後面有7
個0
)。它表明了十進制計數等於10000000
。
Longhand:
for (let i = 0; i < 10000; i++) {}
Shorthand:
for (let i = 0; i < 1e7; i++) {} // All the below will evaluate to true 1e0 === 1; 1e1 === 10; 1e2 === 100; 1e3 === 1000; 1e4 === 10000; 1e5 === 100000;
定義對象文字(Object literals)讓JavaScript變得更有趣。ES6提供了一個更簡單的辦法來分配對象的屬性。若是屬性名和值同樣,你可使用下面簡寫的方式。
Longhand:
const obj = { x:x, y:y };
Shorthand:
const obj = { x, y };
經典函數很容易讀和寫,但它們確實會變得有點冗長,特別是嵌套函數中調用其餘函數時還會讓你感到困惑。
Longhand:
function sayHello(name) { console.log('Hello', name); } setTimeout(function() { console.log('Loaded') }, 2000); list.forEach(function(item) { console.log(item); });
Shorthand:
sayHello = name => console.log('Hello', name); setTimeout(() => console.log('Loaded'), 2000); list.forEach(item => console.log(item));
return
在函數中常常使用到的一個關鍵詞,將返回函數的最終結果。箭頭函數用一個語句將隱式的返回結果(函數必須省略{}
,爲了省略return
關鍵詞)。
若是返回一個多行語句(好比對象),有必要在函數體內使用()
替代{}
。這樣能夠確保代碼是否做爲一個單獨的語句返回。
Longhand:
function calcCircumference(diameter) { return Math.PI * diameter }
Shorthand:
calcCircumference = diameter => ( Math.PI * diameter; )
你可使用if
語句來定義函數參數的默認值。在ES6中,能夠在函數聲明中定義默認值。
Longhand:
function volume(l, w, h) { if (w === undefined) w = 3; if (h === undefined) h = 4; return l * w * h; }
Shorthand:
volume = (l, w = 3, h = 4 ) => (l * w * h); volume(2) //output: 24
是否是厭倦了使用+
來鏈接多個變量變成一個字符串?難道就沒有一個更容易的方法嗎?若是你能使用ES6,那麼你是幸運的。在ES6中,你要作的是使用撇號和${}
,而且把你的變量放在大括號內。
Longhand:
const welcome = 'You have logged in as ' + first + ' ' + last + '.'
const db = 'http://' + host + ':' + port + '/' + database;
Shorthand:
const welcome = `You have logged in as ${first} ${last}`; const db = `http://${host}:${port}/${database}`;
若是你正在使用任何一個流行的Web框架時,就有不少機會使用數組的形式或數據對象的形式與API之間傳遞信息。一旦數據對象達到一個對個組件時,你須要將其展開。
Longhand:
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;
Shorthand:
import { observable, action, runInAction } from 'mobx'; const { store, form, loading, errors, entity } = this.props;