初衷: 整理一下工做中經常使用的JavaScript小技巧分享給你們,但願能幫助到各位小夥伴們,在工做中提高開發效率。javascript
適合人羣: 前端初級開發,大佬繞道。html
在Es6以前,咱們要寫參數默認值的話,還須要在函數體內寫一堆判斷邏輯,而Es6以後新出參數默認值語法,咱們來看一下。前端
function person(name, age, sex = "male") {
console.log(name, age, sex) // 蛙人 24 male
}
person("蛙人", 24)
複製代碼
以前咱們都使用for循環進行遍歷求和,也可使用reduce方法進行求和,簡潔代碼。java
let nums = [1,22,31,4,56]
let sum = nums.reduce((prev, cur) => prev + cur, 0)
複製代碼
if
else
俠咱們寫判斷時,都會使用if
else
但當業務愈來愈龐大時有好幾種狀態時,這樣代碼太冗餘了,咱們作一下簡化。web
if(xxx = 1) {
xxx = "啓用"
} else if(xxx = 2) {
xxx = "停用"
}
// ...省略
// 廢除以上寫法
let operation = {
1: "啓用",
2: "停用"
3: "註銷",
4: "修改"
5: "詳情"
}
xxx = operation[status] // 代碼簡潔清晰
複製代碼
在Es6以前,咱們交互變量值時得使用第三個變量,當Es6出現解構賦值時,咱們能夠很是快速的交換變量。數組
let x = 10;
let y = 20;
[x, y] = [y, x];
複製代碼
在Es6以前,咱們數組去重都使用for循環遍歷或者indexOf等,但Es6出現了Set結構,很是便捷。markdown
不明白Set結構能夠看我上一篇文章哦 《理解數據結構之Set,只要5分鐘!》數據結構
let arr = [1,1,2,434,2,1]
console.log([...new Set(arr)]) // 1 2 434
複製代碼
有時候咱們想獲取地址欄上參數,都是手寫方法,有一個Api實用的方法來處理 URL 的查詢字符串。app
let params = new URLSearchParams(location.search);
params.get("xxx") // 獲取地址欄參數
複製代碼
有些狀況下咱們想要獲取隨機不重複的字符串,就可使用以下方法dom
Math.random().toString(36).substr(2)
複製代碼
快速獲取對象的key值
let person = {name: "蛙人", age: 24};
console.log(Object.keys(person)) // ["name", "age"]
複製代碼
快速獲取對象的value值
let person = {name: "蛙人", age: 24};
console.log(Object.values(person)) // ["蛙人", 24]
複製代碼
在Es6以前,咱們字符串拼接變量,都是使用 + 號來拼接,這樣拼接還好,要是拼接html
標籤就很是的難受,稍不注意就報錯符號問題。Es6出現了模板字符串使用 ``,而後${}裏面綁定變量,使咱們開發很是的便捷。
let name = "蛙人"
console.log(`hello ${name}`)
console.log(`<p>${name}</p>`)
複製代碼
使用對象解構獲取對象值很是簡潔,不用在向傳統那樣使用.
語法一個一個去獲取
const person = {name: "蛙人", age: 24, sex: "male"};
let { age, sex } = person
console.log(age, sex) // 24 male
複製代碼
再也不使用字符串split
方法,使用擴展運算符能夠快速轉換爲數組。
let str = "abcdefg"
console.log([...str]) // ["a", "b", "c", "d", "e", "f", "g"]
複製代碼
若是隻有兩種狀態的狀況強烈推薦使用三目運算,拋棄if else。
let status = 1;
status = status == 1 ? "男" : "女"
複製代碼
??
運算符??
運算符只有前面的值是undefined
or null
纔會執行,工做中有的狀況下使用,咱們來看一下。
let status = undefined;
let text = status ?? "暫無"
console.log(text) // 暫無
複製代碼
?.
運算符?.
運算符這在有時候處理對象時很是有用,看下面案例,person.name
返回undefined
而後在調用toString
這時確定會報錯,這時使用?.
運算符就不會產生錯誤,?.
運算符是隻有在當值不是undefined
時纔會調用toString
方法。
let person = {}
console.log(person.name.toString()) // 報錯
console.log(person.name?.toString()) // undefined
複製代碼
~~
雙非運算符~~
雙非運算符能夠用於向下取整。
console.log(~~4.3) // 4
複製代碼
使用Es6新增方法Object.assign
,合併對象若是對象裏面有重複的值,則後面覆蓋前面,能夠接收無限參數。在工做中也是常用。
let person = {name: "蛙人", age: 24}
let obj = Object.assign({}, person)
console.log(obj) // {name: "蛙人", age: 24}
複製代碼
當前方法只要數組裏面有一個值符合需求,就返回true,不然false。
let list = [1,2,2,2,2,2]
let res = list.some(item => item > 1)
console.log(res) // true
複製代碼
咱們以前使用for遍歷在判斷當前數組裏的值是否全符合要求,還要聲明一個變量來進行累計,直接使用every
當所有知足需求時返回true
,不然返回false
let list = [1,2,2,2,2,2]
let res = list.every(item => item > 1)
console.log(res) // false
複製代碼
有時咱們場景有須要將一個數組順序進行打亂。
let list = [1,2,'蛙人', 1, 34, 3, 12]
let res = list.sort(() => Math.random() - 0.5)
console.log(res)
複製代碼
以前咱們有100個li
元素,都要綁定一個onclick
事件,這樣性能不怎麼好,咱們能夠經過事件委託實現。
ul.on("click", "li", e => {
....省略 操做
})
複製代碼
let arr = []
console.log(Array.isArray(arr)) // true
console.log(Object.prototype.toString.call(arr) == "[object Array]") // true
複製代碼
僞數組不能調用真數組對象上的方法,因此得將僞數組轉換爲真數組,獲取js元素是僞數組。
document.querySelectAll("div") // NodeList[div, div, div, div]
[...document.querySelectorAll('div')] // 轉換爲真數組
Array.from(document.querySelectorAll('div')) // 轉換爲真數組
複製代碼
console.log(+ new Date())
console.log(Date.now())
複製代碼
在Es6以前,咱們只知道使用indexOf
方法去獲取下標,Es6以後還有一個方法哦,若是找到該值返回當前值的下標,找不到返回 -1
let colors = ["red", "blue", "green"]
function getIndex(val) {
return colors.findIndex(i => i == val)
}
getIndex("blue") // 1
複製代碼
在有的狀況須要將數組轉換爲對象,能夠這樣作。
let person = ["蛙人", 24, "male"]
let obj = {}
person.forEach(item => (obj[item] = item))
複製代碼
let num = val => val % 2 == 0;
num(10) // ture 偶數
num(1) // false 奇數
複製代碼
監測當前頁面是否被隱藏,當切換頁面時顯示true
, false
就是打開狀態。通常在工做用主要用到用戶在頁面停留了多長時間。
document.addEventListener("visibilitychange", function() {
console.log(document.hidden);
});
複製代碼
把數組裏面的假值過濾掉。
let list = ["", false, 1, null, undefined, "蛙人", 24]
let res = item => item.filter(Boolean)
console.log(res(list))
複製代碼
有時咱們不想this
是這個值,因此就要改變this
指向,改變this
指向有不少種,箭頭函數
、bind
、apply
、call
、我這裏就演示一種,小夥伴能夠根據不一樣業務場景來選擇使用哪一種方法!
let person = {name: "蛙人"}
ul.onclick = (function(e) {
console.log(this.name )
}).bind(person)
複製代碼
function IsUrl(val) {
try {
if (new URL(val)) {
return true
}
} catch(e) {
return false
}
}
IsUrl("https://www.baidu.cn") // true
IsUrl("www.baidu.cn") // false
複製代碼
有時咱們處理數組時,想直接返回處理完的結果,而不是在從新組合一個數組,這時Map就登場了。
let person = [10, 20, 30]
function fn(item) {
return item + 1
}
let res = person.map(fn)
console.log(res) // [11, 21, 31]
複製代碼
謝謝各位在百忙之中點開這篇文章,但願對大家能有所幫助,若有問題歡迎各位大佬指正。
我是蛙人,若是以爲寫得能夠的話,請點個贊吧。
感興趣的小夥伴能夠加入 [ 前端娛樂圈交流羣 ] 歡迎你們一塊兒來交流討論
往期高贊好文