三分鐘閱讀:給自己3分鐘的時間,拾起自己遺漏的知識點,第2期
文章引用:davidwalsh.name/javascript-…
作者:David Walsh
解讀:skinner
陣列去重
var j = [...new Set([1, 2, 3, 3])];
>> [1,2,3]
複製程式碼
這個去重方法簡單的令人陶醉
過濾空值
空值指的是沒有具體意義的一些值,比如0,undefined,null,false,空字串等
let res = [1,2,0,undefined,null,false,''].filter(Boolean);
>> 1,2
複製程式碼
建立空物件
建立一個空物件,我們可能大多數時候會使用對面字面量為{}
的方式,然而這種方式建立的物件並不是純粹的,它任然有__proto__
屬性以及繼承自Object
原型的一些方法,這種方式建立的物件容易被修改,比如:
let o = {};
let p = Object.create(null);
Object.prototype.say = function(){
console.log('hello')
}
console.log(o.say)
console.log(p.say)
>> f(){}
>> undefined
複製程式碼
可以看到通過{}
建立的物件,很容易就被修改了,而通過Object.create(null)
這種方式建立的物件就很純粹,沒有任何屬性和物件,非常乾淨。
合併物件
通過...
延展操作符可以很容易的合併物件
const person = { a:1 };
const tools = { b:2 };
const attributes = { c:3 };
const summary = {...person, ...tools, ...attributes};
>> {a:1,b:2,c:3}
複製程式碼
不得不說...
延展操作符真是好東西啊!
引數非空檢測
這個方法特別適用於封裝函式時使用,也許我們知道可以在函式引數中直接指定一個預設值,像下面這樣:
function test(parma = 'default'){}
複製程式碼
然而,我們也可以直接賦值一個函式,如果沒有傳參,我們就直接丟擲錯誤提醒,如果一個元件裡面有很多方法,我們就可以直接複用,而不用每個方法裡面都去做非空判斷處理。
const isRequired = () => { throw new Error('param is required'); };
const hello = (name = isRequired()) => { console.log(`hello ${name}`) };
// 丟擲一個錯誤,因為引數沒有傳
hello();
// 沒有問題
hello('hello')
複製程式碼
解構新增別名
在匯入多個模組的時候,為防止引用的元件重名,我們可以在引入時直接賦值一個別名
const obj = { x: 1 };
const { x: otherName } = require('module');
複製程式碼
使用的時候就可以直接使用otherName
獲取查詢字串引數
獲取url裡面的引數值或者追加查詢字串,在這之前,我們一般通過正則匹配處理,然而現在有一個新的api,具體詳情可以檢視這裡,可以讓我們以很簡單的方式去處理url。
假如我們有這樣一個url,"?post=1234&action=edit",我們可以這樣處理這個url
var urlParams = new URLSearchParams('?post=1234&action=edit');
console.log(urlParams.has('post'));
console.log(urlParams.get('action')); // "edit"
console.log(urlParams.getAll('action')); // ["edit"]
console.log(urlParams.toString()); // "?post=1234&action=edit"
urlParams.append('active', '1')
console.log(urlParams); // "?post=1234&action=edit&active=1"
複製程式碼
是不是很方便?那瀏覽器支援程度如何呢?通過這個地址檢視,可以發現大部分瀏覽器都支援哦!,如果碰到不支援的情況,這裡還有個polyfill。