JavaScript 編碼小技巧

三元操做符

若是使用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

Short-circuit Evaluation

分配一個變量值到另外一個變量的時候,你可能想要確保變量不是nullundefined或空。你能夠寫一個有多個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的for循環

若是你只想要原生的JavaScript,而不想依賴於jQuery或Lodash這樣的外部庫,那這個小技巧是很是有用的。

Longhand:

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

Shorthand:

for (let index in allImgs)

Short-circuit Evaluation

若是參數是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本質至關於100000001的後面有70)。它表明了十進制計數等於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

Template Literals

是否是厭倦了使用+來鏈接多個變量變成一個字符串?難道就沒有一個更容易的方法嗎?若是你能使用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}`;

Destructuring Assignment

若是你正在使用任何一個流行的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;
相關文章
相關標籤/搜索