學(xué)習(xí)JavaScript一定要知道的3個小技巧
前言:
通常在 Angular
或 React 項(xiàng)目中,code review
時看到一些老式的 JavaScript
代碼,就會將開發(fā)人員歸類為初學(xué)者。但是,如果您知道以下 3 個技巧,您將被視為現(xiàn)代 JavaScript 的尤達(dá)大師。那么,讓我們開始我們的旅程吧!
一、神奇的擴(kuò)展運(yùn)算符
擴(kuò)展運(yùn)算符(spread
)是三個點(diǎn)( ... ), 可以說我在 JavaScript 中最喜歡的運(yùn)算符了。我主要在以下 3 種情況下使用:
1.拷貝數(shù)組
const arr = [1, 2, 3, 4] const newArr = [...arr] console.log(newArr) // [1, 2, 3, 4]
2.合并數(shù)組
const numArr = [1, 2, 3, 4] const alphaArr = ['a', 'b', 'c'] const newArr = [...numArr, ...alphaArr] console.log(newArr) // [1, 2, 3, 4, 'a', 'b', 'c']
3.展開對象
const rectangle = { width: 10, height: 10 } const cube = { ...rectangle, length: 7 } console.log(cube) // {width: 10, height: 10, length: 7}
二、進(jìn)行空檢查的最佳方法
你還記得你寫的第一個空檢查代碼嗎?當(dāng) JavaScript 還沒有現(xiàn)在這個完善時,我曾在我的舊代碼中這樣寫:
if (foo !== null && foo !== undefined) { }
后來,我的生命被簡單的 if 拯救!
if (foo) {}
只要條件值 foo 不是下列值,都將為真值“
- null
- undefined
- NaN
- 空字符串 ("")
- false
除了簡單的 if 之外,現(xiàn)代 JavaScript
的可選鏈操作符 ?. 與空值合并運(yùn)算符 ?? 可以使我們的代碼更加簡潔
1.可選鏈操作符
可選鏈操作符是訪問嵌套對象屬性的安全方式。這意味著在訪問一長串對象屬性時,我們不必進(jìn)行多次空檢查。當(dāng)嘗試訪問可能不存在的對象屬性時,可選鏈操作符將會使表達(dá)式更短、更簡明
以下示例檢查客戶地址的郵政編碼是否為 null :
const client = { name: 'Liu Xing', address: { zipcode: '1234' } } // 老的取值方式 if (client && client.address && client.address.zipcode) {} // 更加現(xiàn)代的可選鏈操作符方式 if (client?.address?.zipcode) {}
2.空值合并運(yùn)算符
空值合并操作符( ?? )是一個邏輯操作符,當(dāng)左側(cè)的操作數(shù)為 null 或者 undefined
時,返回其右側(cè)操作數(shù),否則返回左側(cè)操作數(shù)。
const defaultMessage = 'Hello JavaScript 之禪' const msg = defaultMessage ?? 'Hello Liu Xing'; console.log(msg); // Hello JavaScript 之禪'
如果 defaultMessage
是 null 或者 undefined
則將打印出 Hello Liu Xing
當(dāng)我們按順序使用它時,它會變得更強(qiáng)大:
console.log(firstName ?? lastName ?? 'anonymous')
在這個例子中,如果 firstName
不是 null/undefined
,它將顯示 firstName, 否則,如果 lastName
不是 null/undefined
,它將顯示 lastName。 最后,如果它們都為 null/undefined
,它將顯示“anonymous
”。
三、使用 .map()、.reduce() 和 .filter()
接下來,談?wù)摵瘮?shù)式和反應(yīng)式編程的強(qiáng)大技術(shù)!幾年前我第一次使用它時,它真的為我打開了一扇新的大門。 現(xiàn)在每次看到這些簡潔的代碼,我仍然被它的美麗所震撼。
今天我舉例介紹三個最常用的方法:map、reduce 和 filter。
在新冠疫情 之前,我們?nèi)グ屠瓒燃佟S谑撬麄內(nèi)コ匈I了些東西。他們買了食物和日用品。但是所有的物品都是歐元,他們想知道每件物品的價格以及他們食物的人民幣總成本。
鑒于 1 歐元等于 7.18 日元。
以傳統(tǒng)方式,我們將使用經(jīng)典循環(huán)來完成:
const items = [ { name: 'pineapple', price: 2, type: 'food' }, { name: 'beef', price: 20, type: 'food' }, { name: 'advocate', price: 1, type: 'food' }, { name: 'shampoo', price: 5, type: 'other' } ] let sum = 0 const itemsInYuan = [] for (let i = 0; i < items.length; i++) { const item = items[i] item.price *= 7.18 itemsInYuan.push(item) if (item.type === 'food') { sum += item.price } } console.log(itemsInYuan) /* [ { name: 'pineapple', price: 14.36, type: 'food' }, { name: 'beef', price: 143.6, type: 'food' }, { name: 'advocate', price: 7.18, type: 'food' }, { name: 'shampoo', price: 35.9, type: 'other' } ] */ console.log(sum) // 165.14 現(xiàn)在我們來使用現(xiàn)在 JavaScript 提供的函數(shù)式編程方法來實(shí)現(xiàn)這個計(jì)算。 const itemsInYuan = items.map(item => { const itemInYuan = { ...item } itemInYuan.price *= 7.18 return itemInYuan }) const sum = itemsInYuan.filter(item => item.type === 'food').reduce((total, item) => total + item.price, 0)
上述示例使用 map 方法將歐元轉(zhuǎn)為日元,使用 filter 過濾掉非食品的項(xiàng)目,使用 reduce 來計(jì)算價格總和。
到此這篇關(guān)于學(xué)習(xí)JavaScript一定要知道的3個小技巧的文章就介紹到這了,更多相關(guān)JavaScript小技巧內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript實(shí)現(xiàn)AOP詳解(面向切面編程,裝飾者模式)
下面小編就為大家分享一篇JavaScript實(shí)現(xiàn)AOP的方法(面向切面編程,裝飾者模式),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12JS中video標(biāo)簽自動播放音視頻并繪制波形圖效果
html中的<video>標(biāo)簽可以用來播放常見的音視頻格式,支持的格式包括:MP3、Ogg、WAV、AAC、MP4、WebM、AVI等,當(dāng)然支持的格式也和瀏覽器和操作系統(tǒng)有關(guān),這篇文章主要介紹了video標(biāo)簽自動播放音視頻并繪制波形圖,需要的朋友可以參考下2023-09-09微信小程序自定義純凈模態(tài)框(彈出框)的實(shí)例代碼
這篇文章主要介紹了微信小程序自定義純凈模態(tài)框(彈出框)的實(shí)例代碼,代碼簡答易懂,非常不錯,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03關(guān)于JS控制代碼暫停的實(shí)現(xiàn)方法分享
關(guān)于JS控制代碼暫停的工作總結(jié),需要的朋友可以參考下2012-10-10js中的preventDefault與stopPropagation詳解
本篇文章主要是對js中的preventDefault與stopPropagation進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01js獲取鼠標(biāo)點(diǎn)擊的對象,點(diǎn)擊另一個按鈕刪除該對象的實(shí)現(xiàn)代碼
下面小編就為大家?guī)硪黄猨s獲取鼠標(biāo)點(diǎn)擊的對象,點(diǎn)擊另一個按鈕刪除該對象的實(shí)現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-05-05基于BootStrap Metronic開發(fā)框架經(jīng)驗(yàn)小結(jié)【一】框架總覽及菜單模塊的處理
這篇文章主要介紹了基于BootStrap Metronic開發(fā)框架經(jīng)驗(yàn)小結(jié)【一】框架總覽及菜單模塊的處理的相關(guān)資料,小編認(rèn)為非常具有參考借鑒價值,感興趣的朋友一起學(xué)習(xí)吧2016-05-05