今天小編給大家分享一下JavaScript如何判斷URL是否合法及全排列的相關(guān)知識點,內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計、成都做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出米脂免費做網(wǎng)站回饋大家。
補全JavaScript
代碼,要求如下:
給"ul
"標(biāo)簽添加點擊事件
當(dāng)點擊某"li
"標(biāo)簽時,該標(biāo)簽內(nèi)容拼接".
“符號。如:某"li
"標(biāo)簽被點擊時,該標(biāo)簽內(nèi)容為”..
"
<!DOCTYPE html><html lang="en"><head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>事件委托</title></head><body>
<ul>
<li>.</li>
<li>.</li>
<li>.</li>
</ul>
<script type="text/javascript">
// 補全代碼
const ul = document.getElementsByTagName('ul')[0]
ul.onclick = function (e) {
const tar = (e || window.event).target // 如果點擊的對象的名稱是li
// localName 獲取標(biāo)簽名
if (tar.localName === 'li') {
tar.innerHTML = tar.innerHTML + '.'
}
}
</script></body></html>
這道題挺簡單的,事件委托的原理實際就是利用了事件冒泡的機(jī)制。
事件冒泡:在一個對象上觸發(fā)某類事件(比如單擊click事件),如果此對象定義了此事件的處理程序,那么此事件就會調(diào)用這個處理程序,如果沒有定義此事件處理程序或者事件返回true,那么這個事件就會向這個對象的父級對象傳播,從里到外,直至它被處理(父級對象所有同類事件都將被激活),或者它到達(dá)了對象層次的最頂層,即document對象(有些瀏覽器)
在實際開發(fā)中,使用事件委托統(tǒng)一由父類捕捉并處理事件,這樣可以減少子類事件的重復(fù)定義。
補全JavaScript
代碼,要求以Boolean
的形式返回字符串參數(shù)是否為合法的URL
格式。
注意:協(xié)議僅為HTTP(S)
const _isUrl = url => {
// 補全代碼
let reg = /^((https|http):\/\/)?(([A-Za-z0-9]+-[A-Za-z0-9]+|[A-Za-z0-9]+)\.)+([A-Za-z]{2,6})(:\d+)?(\/.*)?(\?.*)?(#.*)?$/g;
return reg.test(url)}
這題就是考察了正則的應(yīng)用,運用了大量的正則知識,包括:
^
代表開頭
[A-Za-z0-9]
表示匹配大小寫字母和數(shù)字
\/
表示匹配/
,因為在正則里/
有其它含義,所以要匹配/
需要在前面使用\
對其進(jìn)行轉(zhuǎn)義
?
等價于{0,1}
,表示出現(xiàn)一次或者不出現(xiàn)
+
表示出現(xiàn)的次數(shù)至少為1
|
(管道符),是或的意思,表示匹配|
兩邊內(nèi)容的其中任何之一
\.
表示匹配.
,與/
一樣,要匹配.
需要在前面使用\
對其進(jìn)行轉(zhuǎn)義
{n,m}
表示出現(xiàn)n-m次
\d
匹配數(shù)字
.
就是[^\n\r\u2028\u2029]
,是通配符,表示幾乎任意字符
*
表示出現(xiàn)次數(shù)為0次或者多次
.*
就是匹配任何多個任意字符
$
代表結(jié)尾
g
代表全局匹配
合法的URL
格式如下:
協(xié)議部分http(s)
可選: 表示為((https|http):\/\/)?
域名部分 :表示為(([A-Za-z0-9]+-[A-Za-z0-9]+|[A-Za-z0-9]+)\.)+
頂級域名,如com
、cn
等為2-6位:表示為([a-zA-Z]{2,6})
端口部分:表示為(:\d+)?
請求路徑如/login
:表示為 (\/.*)?
問號傳參及哈希值如?age=1
、#dom
:表示為 (\?.*)?
和(#.*)?
補全JavaScript
代碼,要求以數(shù)組的形式返回字符串參數(shù)的所有排列組合。
注意:
字符串參數(shù)中的字符無重復(fù)且僅包含小寫字母
返回的排列組合數(shù)組不區(qū)分順序
示例:
輸入:_permute('abc')
輸出:['abc','acb','bac','bca','cab','cba']
全排列是比較常見的算法之一,解法有很多,這里給大家提供一個很巧妙的解法:
const _permute = string => {
// 補全代
const res = []; // 結(jié)果數(shù)組
function search(str) {
console.log('1', 'str=' + str);
// 如果長度相等了就存放到結(jié)果數(shù)組中
if (str.length === string.length) {
res.push(str)
}
// 遍歷string
for (let char of string) {
console.log('2', 'str=' + str, 'char=' + char);
// 如果str內(nèi)不含char,就使用str+char開始遞歸
if (str.indexOf(char) < 0) {
search(str + char)
}
}
}
search('')
return res;}
整體思路就是運用循環(huán)加遞歸,但這個過程中涉及到了JavaScript
中循環(huán)的執(zhí)行機(jī)制,我們以執(zhí)行console.log(_permute('ab'));
為例查看控制臺打印結(jié)果:
search
函數(shù)中的for
循環(huán)執(zhí)行次數(shù)與string
參數(shù)的長度相等,此時傳遞的string
參數(shù)為ab
,長度為2,即search
函數(shù)中的for
循環(huán)會執(zhí)行兩次。
這里需要注意的就是:for
循環(huán)中執(zhí)行的遞歸(再次調(diào)用search
函數(shù))并不會中斷當(dāng)前的for
循環(huán),只會將還未執(zhí)行的循環(huán)暫且擱置,等到系統(tǒng)空閑時這些擱置的循環(huán)才會開始執(zhí)行( javascript
引擎在同一時刻只能處理一個任務(wù),即單線程),具體過程見下方圖解:
以上就是“JavaScript如何判斷URL是否合法及全排列”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
本文標(biāo)題:JavaScript如何判斷URL是否合法及全排列
分享網(wǎng)址:http://aaarwkj.com/article14/jegsde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、定制網(wǎng)站、網(wǎng)站營銷、網(wǎng)站收錄、、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)