本文為譯文,第一次嘗試翻譯英文博客,很多地方翻譯得不好。本文內容十分簡單,可直接查看英文原文,或直接看代碼部分。文章每一部分都有拓展(暫未翻譯),可點擊查看。
原文:7 Useful JavaScript Tricks
以下為譯文:
和其他編程語言一樣,JavaScript 有著許多技巧來解決一些簡單的、亦或是困難的任務。其中有大家所熟知的部分,但也有一些技巧可能超乎你的想象。現在讓我們來看一下這七個你隨即可用的 JavaScript 小技巧!
數組去重
獲取數組的唯一值可能比你想象中要簡單:
var j = [...new Set([1, 2, 3, 3])]
>> [1, 2, 3]
我超愛(...)和 Set!
數組配合布爾
要從一個數組中過濾falsy值?你或許不知道有這種技巧:
myArray
.map(item => {
// ...
// 記得 return
})
// 擺脫這些空值
.filter(Boolean);
只需傳遞 Boolean 就能去除這些 falsy 值!
創建一個空的對象
當然,似乎你可以通過像 {} 這樣來創建一個空對象,但實際上這樣創建的對象還是有__proto__、hasOwnProperty 以及其他對象的方法。下面是一種創造一個純對象的方法:
let dict = Object.create(null);
// dict.__proto__ === "undefined"
// 在你添加動態屬性之前為空
這個對象上絕對沒有你沒有放入的鍵或方法!
合并對象
JavaScript 合并多個對象的需求由來已久,尤其是當我們創建帶有選項的類和小部件時:
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",
}
*/
這三個點讓任務變得簡單多了!
強制函數傳參
能夠為函數參數設置默認值是 JavaScript 的一個很棒的補充。請查看這個技巧,要求為給定的參數傳遞值:
const isRequired = () => { throw new Error('param is required'); };
const hello = (name = isRequired()) => { console.log(`hello ${name}`) };
// 由于沒給 hello() 傳 name,該代碼會報錯
// 下面代碼也會報錯
hello(undefined);
// 來看看符合要求的寫法
hello(null);
hello('David');
這是某種下級驗證和 JavaScript 慣用方法!
解構別名
解構賦值是一個非常受歡迎的 JavaScript 升級,但有時我們更喜歡用其他名稱引用這些屬性,所以我們可以利用別名:
const obj = { x: 1 };
// Grabs obj.x as { x }
const { x } = obj;
// Grabs obj.x as { otherName }
const { x: otherName } = obj;
有效避免了與現有變量的命名沖突!
獲取查詢字符串參數
多年來,我們編寫了大量正則表達式來獲取查詢字符串值,但那些日子已經一去不復返了——我們擁有了令人驚嘆的 URLSearchParams API
// 假設 "?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 已經發生了很大的變化,但我最喜歡的部分是我們現在看到 JavaScript 語言改進的速度。盡管 JavaScript 在不斷動態變化,我們仍然需要使用一些不錯的技巧;把這些技巧放在你的工具箱里,以備不時之需!
你最喜歡的 JavaScript 技巧是什么呢?