每種編程語言都有一些「黑魔法」或者說小技巧,JS也不例外,大部分是藉助ES6或者瀏覽器新特性實現。下面介紹的7個實用小技巧,相信其中有些你必定用過。javascript
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
,下面這個方法能夠建立一個純對象。java
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中咱們常常會使用對象結構獲取其中的屬性,但有時候會想重命名屬性名,以免和做用域中存在的變量名衝突,這時候能夠爲解構屬性名添加別名。app
const obj = { x: 1 }; // Grabs obj.x as { x } const { x } = obj; // Grabs obj.x as as { otherName } const { x: otherName } = obj;
之前獲取URL中的字符串參數咱們須要經過函數寫正則匹配,如今經過URLSearchParams
API便可實現。編程語言
// 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代碼可能等於當年的幾行代碼。ide
擁抱JS的這些新變化意味着前端開發效率的不斷提高,以及良好的編碼體驗。固然無論語言如何變化,咱們總能在編程中總結一些小技巧來精簡代碼。函數
本文首發於公衆號「前端新視界」,若是你也有一些Javascript的小技巧,歡迎在下方留言,和你們一塊兒分享哦!