摘要:使用一元加模擬函數(shù)原理對非數(shù)值類型的數(shù)據(jù)使用一元加,會起到與函數(shù)相同的效果。中,若判斷不為則不再進(jìn)行下一步操作。使用邏輯或設(shè)置默認(rèn)值邏輯或也屬于短路操作,即當(dāng)?shù)谝粋€操作數(shù)可以決定結(jié)果時,不再對第二個操作數(shù)進(jìn)行求值。
善于利用JS中的小知識的利用,可以很簡潔的編寫代碼
1. 使用!!模擬Boolean()函數(shù)原理:邏輯非操作一個數(shù)據(jù)對象時,會先將數(shù)據(jù)對象轉(zhuǎn)換為布爾值,然后取反,兩個!!重復(fù)取反,就實現(xiàn)了轉(zhuǎn)換為布爾值的效果。
2. 使用一元加(+)模擬Number()函數(shù)原理:對非數(shù)值類型的數(shù)據(jù)使用一元加(+),會起到與Number()函數(shù)相同的效果。
null轉(zhuǎn)換為0
undefined轉(zhuǎn)換為NaN
false轉(zhuǎn)換為0,true轉(zhuǎn)換為1
對于字符串:
空字串轉(zhuǎn)換為0
含有數(shù)字或者浮點數(shù)或者十六進(jìn)制格式的數(shù)據(jù)(11, 0.3, 0xfe等),轉(zhuǎn)換為相應(yīng)的數(shù)值
含有其他格式字符,無法轉(zhuǎn)換為數(shù)值的字符串,轉(zhuǎn)換為NaN
對于對象,先調(diào)用valueOf()方法,在轉(zhuǎn)換,若結(jié)果為NaN,那么再調(diào)用toString()方法,之后再轉(zhuǎn)換
3. 使用邏輯與(&&)進(jìn)行短路操作if(connected){ login(); }
以上代碼可以簡化為
connected && login()
也可以用這種方法來檢查對象中是否存在某個屬性
user && user.login
原理:邏輯與(&&)會首先對第一個操作數(shù)進(jìn)行求值,只有求值結(jié)果為true時才會對第二個操作數(shù)求值。connected && login()中,若判斷connected不為true,則不再進(jìn)行下一步操作。
所謂的短路操作即第一個操作數(shù)可以決定結(jié)果,則不再對第二個操作數(shù)進(jìn)行求值。
邏輯或(||)也屬于短路操作,即當(dāng)?shù)谝粋€操作數(shù)可以決定結(jié)果時,不再對第二個操作數(shù)進(jìn)行求值。
利用這個特點,我們可以給賦值語句設(shè)置默認(rèn)值。只有當(dāng)?shù)谝粋€操作數(shù)為null或者undefined時,才會把第二個操作數(shù)賦值給目標(biāo)。
function User(name, age){ this.name = name || "Liming"; }
上述代碼中,如果函數(shù)中沒有傳入name參數(shù),name的值為undefined,那么就會給this.name賦值為"Liming"。
ES6中可以為函數(shù)設(shè)置默認(rèn)值,所以這個無需在函數(shù)中使用,但是其他地方還是很有用的。
可以使用以下代碼獲取數(shù)組中最后n個元素
var array = [1, 2, 3, 4, 5, 6]; console.log(array.slice(-1)); //[6] console.log(array.slice(-2)); //[5, 6]
原理:Array.prototype.slice(begin,end)可以用來裁剪數(shù)組,第二個參數(shù)的默認(rèn)值是數(shù)組的長度值。若值傳入一個參數(shù),則會返回從指定索引開始到數(shù)組結(jié)尾的所有值。
而slice()方法還可以接收負(fù)值,當(dāng)傳入負(fù)值時,會自動加上數(shù)組的長度值使其轉(zhuǎn)換為正值,于是便得到了最后的n個值。
使用document.querySelectorAll("div")返回的是NodeList對象,雖然它很像數(shù)組,但是并不能使用諸如sort(),filter()等方法。你可以將其轉(zhuǎn)換為真正的數(shù)組。
var eles = document.querySelectorAll("p"); //NodeList var arrayElements = [].slice.call(eles); //轉(zhuǎn)化為數(shù)組 // 或者 var arrayElements = Array.prototype.slice.call(eles); // 或者 var arrayElements = Array.from(eles);
原理:
[].slice.call(eles):
首先創(chuàng)建了一個空數(shù)組[],然后調(diào)用他的slice()方法,但是在slice()方法的執(zhí)行中,把this對象指向了eles,所以會對eles進(jìn)行裁減,由于對slice()方法沒有傳入?yún)?shù),所以相當(dāng)于slice(0,eles.length),會按照元長度返回一個數(shù)組。
Array.prototype.slice.call(eles):
原理與上面相似,只不過這次沒有創(chuàng)建空數(shù)組,而是直接使用了原型中的方法
Array.from()
Array.from()接受一個類數(shù)組對象或者可迭代對象,基于該對象創(chuàng)建一個新的Array實例。詳解看這里
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/83307.html
摘要:歡迎來我的個人站點性能優(yōu)化其他優(yōu)化瀏覽器關(guān)鍵渲染路徑開啟性能優(yōu)化之旅高性能滾動及頁面渲染優(yōu)化理論寫法對壓縮率的影響唯快不破應(yīng)用的個優(yōu)化步驟進(jìn)階鵝廠大神用直出實現(xiàn)網(wǎng)頁瞬開緩存網(wǎng)頁性能管理詳解寫給后端程序員的緩存原理介紹年底補課緩存機制優(yōu)化動 歡迎來我的個人站點 性能優(yōu)化 其他 優(yōu)化瀏覽器關(guān)鍵渲染路徑 - 開啟性能優(yōu)化之旅 高性能滾動 scroll 及頁面渲染優(yōu)化 理論 | HTML寫法...
摘要:歡迎來我的個人站點性能優(yōu)化其他優(yōu)化瀏覽器關(guān)鍵渲染路徑開啟性能優(yōu)化之旅高性能滾動及頁面渲染優(yōu)化理論寫法對壓縮率的影響唯快不破應(yīng)用的個優(yōu)化步驟進(jìn)階鵝廠大神用直出實現(xiàn)網(wǎng)頁瞬開緩存網(wǎng)頁性能管理詳解寫給后端程序員的緩存原理介紹年底補課緩存機制優(yōu)化動 歡迎來我的個人站點 性能優(yōu)化 其他 優(yōu)化瀏覽器關(guān)鍵渲染路徑 - 開啟性能優(yōu)化之旅 高性能滾動 scroll 及頁面渲染優(yōu)化 理論 | HTML寫法...
摘要:歡迎來我的個人站點性能優(yōu)化其他優(yōu)化瀏覽器關(guān)鍵渲染路徑開啟性能優(yōu)化之旅高性能滾動及頁面渲染優(yōu)化理論寫法對壓縮率的影響唯快不破應(yīng)用的個優(yōu)化步驟進(jìn)階鵝廠大神用直出實現(xiàn)網(wǎng)頁瞬開緩存網(wǎng)頁性能管理詳解寫給后端程序員的緩存原理介紹年底補課緩存機制優(yōu)化動 歡迎來我的個人站點 性能優(yōu)化 其他 優(yōu)化瀏覽器關(guān)鍵渲染路徑 - 開啟性能優(yōu)化之旅 高性能滾動 scroll 及頁面渲染優(yōu)化 理論 | HTML寫法...
摘要:我的書簽我的書簽謹(jǐn)慎導(dǎo)入,小心覆蓋工具類版本管理快速切換源配置教程指南可視化工具前端工具集前端助手網(wǎng)絡(luò)封包截取工具格式化工具標(biāo)注工具模擬請求類深入淺出布局你所不知道的動畫技巧與細(xì)節(jié)常用代碼黑魔法小技巧,讓你少寫不必要的,代碼更優(yōu)雅一勞永 我的書簽 我的書簽(謹(jǐn)慎導(dǎo)入,小心覆蓋) 工具類 nvm: node版本管理 nrm: 快速切換npm源 shell: zsh+on-my-zsh配...
摘要:我的書簽我的書簽謹(jǐn)慎導(dǎo)入,小心覆蓋工具類版本管理快速切換源配置教程指南可視化工具前端工具集前端助手網(wǎng)絡(luò)封包截取工具格式化工具標(biāo)注工具模擬請求類深入淺出布局你所不知道的動畫技巧與細(xì)節(jié)常用代碼黑魔法小技巧,讓你少寫不必要的,代碼更優(yōu)雅一勞永 我的書簽 我的書簽(謹(jǐn)慎導(dǎo)入,小心覆蓋) 工具類 nvm: node版本管理 nrm: 快速切換npm源 shell: zsh+on-my-zsh配...
閱讀 3595·2021-09-13 10:28
閱讀 1946·2021-08-10 09:43
閱讀 1018·2019-08-30 15:44
閱讀 3189·2019-08-30 13:14
閱讀 1843·2019-08-29 16:56
閱讀 2946·2019-08-29 16:35
閱讀 2852·2019-08-29 12:58
閱讀 872·2019-08-26 13:46