7個javascript實用小技巧 數組去重 數組清洗 創建空對象 合併對象 設置函數必傳參數 解構別名 獲取查詢字符串參數

每種編程語言都有一些“黑魔法”或者說小技巧,JS也不例外,大部分是藉助ES6或者瀏覽器新特性實現。下面介紹的7個實用小技巧,相信其中有些你一定用過。

數組去重

const j = [...new Set([1, 2, 3, 3])]
>> [1, 2, 3]

數組清洗

洗掉數組中一些無用的值,如0, undefined, null, false

myArray
    .map(item => {
        // ...
    })
    // Get rid of bad values
    .filter(Boolean);

創建空對象

我們可以使用對象字面量{}來創建空對象,但這樣創建的對象有隱式原型__proto__和一些對象方法比如常見的hasOwnProperty,下面這個方法可以創建一個純對象。

let dict = Object.create(null);

// dict.__proto__ === "undefined"
// No object properties exist until you add them

該方法創建的對象沒有任何的屬性及方法

合併對象

JS中我們經常會有合併對象的需求,比如常見的給用傳入配置覆蓋默認配置,通過ES6擴展運算符就能快速實現。

const person = { name: 'David Walsh', gender: 'Male' };
const tools = { computer: 'Mac', editor: 'Atom' };
const attributes = { handsomeness: 'Extreme', hair: 'Brown', eyes: 'Blue' };

const summary = {...person, ...tools, ...attributes};
/*
Object {
  "computer": "Mac",
  "editor": "Atom",
  "eyes": "Blue",
  "gender": "Male",
  "hair": "Brown",
  "handsomeness": "Extreme",
  "name": "David Walsh",
}
*/

設置函數必傳參數

藉助ES6支持的默認參數特性,我們可以將默認參數設置爲一個執行拋出異常代碼函數返回的值,這樣當我們沒有傳參時就會拋出異常終止後面的代碼運行。

const isRequired = () => { throw new Error('param is required'); };

const hello = (name = isRequired()) => { console.log(`hello ${name}`) };

// This will throw an error because no name is provided
hello();

// This will also throw an error
hello(undefined);

// These are good!
hello(null);
hello('David');

解構別名

ES6中我們經常會使用對象結構獲取其中的屬性,但有時候會想重命名屬性名,以避免和作用域中存在的變量名衝突,這時候可以爲解構屬性名添加別名。

const obj = { x: 1 };

// Grabs obj.x as { x }
const { x } = obj;

// Grabs obj.x as as { otherName }
const { x: otherName } = obj;

獲取查詢字符串參數

以前獲取URL中的字符串參數我們需要通過函數寫正則匹配,現在通過URLSearchParamsAPI即可實現。

// Assuming "?post=1234&action=edit"

var urlParams = new URLSearchParams(window.location.search);

console.log(urlParams.has('post')); // true
console.log(urlParams.get('action')); // "edit"
console.log(urlParams.getAll('action')); // ["edit"]
console.log(urlParams.toString()); // "?post=1234&action=edit"
console.log(urlParams.append('active', '1')); // "?post=1234&action=edit&active=1"

隨着Javascript的不斷髮展,很多語言層面上的不良特性都在逐漸移除或者改進,如今的一行ES6代碼可能等於當年的幾行代碼。

擁抱JS的這些新變化意味着前端開發效率的不斷提升,以及良好的編碼體驗。當然不管語言如何變化,我們總能在編程中總結一些小技巧來精簡代碼。

PS:更多前端資訊、技術乾貨,請關注公衆號「前端新視界」,後臺回覆 “1” 獲取100本PDF前端電子書
回覆 “2” 獲取小編精選的Python編程電子書

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章