中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript如何判斷URL是否合法及全排列

發布時間:2022-11-16 16:21:13 來源:億速云 閱讀:192 作者:iii 欄目:web開發

今天小編給大家分享一下JavaScript如何判斷URL是否合法及全排列的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

1、事件委托

效果演示

JavaScript如何判斷URL是否合法及全排列

要求

補全JavaScript代碼,要求如下:

  • 給"ul"標簽添加點擊事件

  • 當點擊某"li"標簽時,該標簽內容拼接".“符號。如:某"li"標簽被點擊時,該標簽內容為”.."

手撕代碼

<!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 獲取標簽名
            if (tar.localName === 'li') {
                tar.innerHTML = tar.innerHTML + '.'
            }
        }
    </script></body></html>

這道題挺簡單的,事件委托的原理實際就是利用了事件冒泡的機制。

事件冒泡:在一個對象上觸發某類事件(比如單擊click事件),如果此對象定義了此事件的處理程序,那么此事件就會調用這個處理程序,如果沒有定義此事件處理程序或者事件返回true,那么這個事件就會向這個對象的父級對象傳播,從里到外,直至它被處理(父級對象所有同類事件都將被激活),或者它到達了對象層次的最頂層,即document對象(有些瀏覽器)

在實際開發中,使用事件委托統一由父類捕捉并處理事件,這樣可以減少子類事件的重復定義。

2、判斷URL是否合法

要求

補全JavaScript代碼,要求以Boolean的形式返回字符串參數是否為合法的URL格式。

注意:協議僅為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)}

這題就是考察了正則的應用,運用了大量的正則知識,包括:

  • ^代表開頭

  • [A-Za-z0-9]表示匹配大小寫字母和數字

  • \/表示匹配/,因為在正則里/有其它含義,所以要匹配/需要在前面使用\對其進行轉義

  • ? 等價于{0,1},表示出現一次或者不出現

  • +表示出現的次數至少為1

  • |(管道符),是的意思,表示匹配|兩邊內容的其中任何之一

  • \.表示匹配.,與/一樣,要匹配.需要在前面使用\對其進行轉義

  • {n,m} 表示出現n-m次

  • \d匹配數字

  • .就是[^\n\r\u2028\u2029],是通配符,表示幾乎任意字符

  • *表示出現次數為0次或者多次

  • .*就是匹配任何多個任意字符

  • $代表結尾

  • g代表全局匹配

合法的URL格式如下:

  • 協議部分http(s)可選: 表示為((https|http):\/\/)?

  • 域名部分 :表示為(([A-Za-z0-9]+-[A-Za-z0-9]+|[A-Za-z0-9]+)\.)+

  • 頂級域名,如comcn等為2-6位:表示為([a-zA-Z]{2,6})

  • 端口部分:表示為(:\d+)?

  • 請求路徑如/login:表示為 (\/.*)?

  • 問號傳參及哈希值如?age=1#dom:表示為 (\?.*)?(#.*)?

3、全排列

要求

補全JavaScript代碼,要求以數組的形式返回字符串參數的所有排列組合。
注意:

  • 字符串參數中的字符無重復且僅包含小寫字母

  • 返回的排列組合數組不區分順序

示例:

輸入:_permute('abc')
輸出:['abc','acb','bac','bca','cab','cba']

手撕代碼

全排列是比較常見的算法之一,解法有很多,這里給大家提供一個很巧妙的解法:

const _permute = string => {
    // 補全代
    const res = []; // 結果數組
    function search(str) {
    	console.log('1', 'str=' + str);
    	// 如果長度相等了就存放到結果數組中
        if (str.length === string.length) {
            res.push(str)
        }
        // 遍歷string
        for (let char of string) {
        	console.log('2', 'str=' + str, 'char=' + char);
        	// 如果str內不含char,就使用str+char開始遞歸
            if (str.indexOf(char) < 0) {
                search(str + char)
            }
        }
    }
    search('')
    return  res;}

整體思路就是運用循環加遞歸,但這個過程中涉及到了JavaScript中循環的執行機制,我們以執行console.log(_permute('ab'));為例查看控制臺打印結果:

JavaScript如何判斷URL是否合法及全排列

search函數中的for循環執行次數與string參數的長度相等,此時傳遞的string參數為ab,長度為2,即search函數中的for循環會執行兩次。

這里需要注意的就是:for循環中執行的遞歸(再次調用search函數)并不會中斷當前的for循環,只會將還未執行的循環暫且擱置,等到系統空閑時這些擱置的循環才會開始執行javascript 引擎在同一時刻只能處理一個任務,即單線程),具體過程見下方圖解:

JavaScript如何判斷URL是否合法及全排列

以上就是“JavaScript如何判斷URL是否合法及全排列”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

澄江县| 信宜市| 双流县| 繁峙县| 仙游县| 芦山县| 宣威市| 沭阳县| 河西区| 云南省| 闸北区| 绥德县| 漠河县| 郧西县| 固原市| 达日县| 峡江县| 措美县| 长治市| 响水县| 丹江口市| 南开区| 柳林县| 张掖市| 黄大仙区| 临猗县| 特克斯县| 广元市| 浦县| 肥东县| 密云县| 云阳县| 西平县| 金华市| 镇巴县| 通许县| 承德市| 曲水县| 海伦市| 西乡县| 稷山县|