97国产精品视频人人做人人爱,3344在线观看无码,成年人国产视频,欧美日一级片,在线看AV天堂,高清无码一本到东京热,欧美一级黄片一区2区,免费又爽又刺激高潮网址

如何用 JavaScript 來解析 URL

2020-7-14    seo達(dá)人

統(tǒng)一資源定位符,縮寫為URL,是對網(wǎng)絡(luò)資源(網(wǎng)頁、圖像、文件)的引用。URL指定資源位置和檢索資源的機(jī)制(http、ftp、mailto)。


舉個例子,這里是這篇文章的 URL 地址:


https://dmitripavlutin.com/parse-url-javascript

很多時候你需要獲取到一段 URL 的某個組成部分。它們可能是 hostname(例如 dmitripavlutin.com),或者 pathname(例如 /parse-url-javascript)。


一個方便的用于獲取 URL 組成部分的辦法是通過 URL() 構(gòu)造函數(shù)。


在這篇文章中,我將給大家展示一段 URL 的結(jié)構(gòu),以及它的主要組成部分。


接著,我會告訴你如何使用 URL() 構(gòu)造函數(shù)來輕松獲取 URL 的組成部分,比如 hostname,pathname,query 或者 hash。


1. URL 結(jié)構(gòu)

一圖勝千言。不需要過多的文字描述,通過下面的圖片你就可以理解一段 URL 的各個組成部分:


image


2. URL() 構(gòu)造函數(shù)

URL() 構(gòu)造函數(shù)允許我們用它來解析一段 URL:


const url = new URL(relativeOrAbsolute [, absoluteBase]);

參數(shù) relativeOrAbsolute 既可以是絕對路徑,也可以是相對路徑。如果第一個參數(shù)是相對路徑的話,那么第二個參數(shù) absoluteBase 則必傳,且必須為第一個參數(shù)的絕對路徑。


舉個例子,讓我們用一個絕對路徑的 URL 來初始化 URL() 函數(shù):


const url = new URL('http://example.com/path/index.html');


url.href; // => 'http://example.com/path/index.html'

或者我們可以使用相對路徑和絕對路徑:


const url = new URL('/path/index.html', 'http://example.com');


url.href; // => 'http://example.com/path/index.html'

URL() 實例中的 href 屬性返回了完整的 URL 字符串。


在新建了 URL() 的實例以后,你可以用它來訪問前文圖片中的任意 URL 組成部分。作為參考,下面是 URL() 實例的接口列表:


interface URL {

 href:     USVString;

 protocol: USVString;

 username: USVString;

 password: USVString;

 host:     USVString;

 hostname: USVString;

 port:     USVString;

 pathname: USVString;

 search:   USVString;

 hash:     USVString;


 readonly origin: USVString;

 readonly searchParams: URLSearchParams;


 toJSON(): USVString;

}

上述的 USVString 參數(shù)在 JavaScript 中會映射成字符串。


3. Query 字符串

url.search 可以獲取到 URL 當(dāng)中 ? 后面的 query 字符串:


const url = new URL(

 'http://example.com/path/index.html?message=hello&who=world'

);


url.search; // => '?message=hello&who=world'

如果 query 參數(shù)不存在,url.search 默認(rèn)會返回一個空字符串 '':


const url1 = new URL('http://example.com/path/index.html');

const url2 = new URL('http://example.com/path/index.html?');


url1.search; // => ''

url2.search; // => ''

3.1 解析 query 字符串

相比于獲得原生的 query 字符串,更實用的場景是獲取到具體的 query 參數(shù)。


獲取具體 query 參數(shù)的一個簡單的方法是利用 url.searchParams 屬性。這個屬性是 URLSearchParams 的實例。


URLSearchParams 對象提供了許多用于獲取 query 參數(shù)的方法,如get(param),has(param)等。


下面來看個例子:


const url = new URL(

 'http://example.com/path/index.html?message=hello&who=world'

);


url.searchParams.get('message'); // => 'hello'

url.searchParams.get('missing'); // => null

url.searchParams.get('message') 返回了 message 這個 query 參數(shù)的值——hello。


如果使用 url.searchParams.get('missing') 來獲取一個不存在的參數(shù),則得到一個 null。


4. hostname

url.hostname 屬性返回一段 URL 的 hostname 部分:


const url = new URL('http://example.com/path/index.html');


url.hostname; // => 'example.com'

5. pathname

url. pathname 屬性返回一段 URL 的 pathname 部分:


const url = new URL('http://example.com/path/index.html?param=value');


url.pathname; // => '/path/index.html'

如果這段 URL 不含 path,則該屬性返回一個斜杠 /:


const url = new URL('http://example.com/');


url.pathname; // => '/'

6. hash

最后,我們可以通過 url.hash 屬性來獲取 URL 中的 hash 值:


const url = new URL('http://example.com/path/index.html#bottom');


url.hash; // => '#bottom'

當(dāng) URL 中的 hash 不存在時,url.hash 屬性會返回一個空字符串 '':


const url = new URL('http://example.com/path/index.html');


url.hash; // => ''

7. URL 校驗

當(dāng)使用 new URL() 構(gòu)造函數(shù)來新建實例的時候,作為一種副作用,它同時也會對 URL 進(jìn)行校驗。如果 URL 不合法,則會拋出一個 TypeError。


舉個例子,http ://example.com 是一段非法 URL,因為它在 http 后面多寫了一個空格。


讓我們用這個非法 URL 來初始化 URL() 構(gòu)造函數(shù):


try {

 const url = new URL('http ://example.com');

} catch (error) {

 error; // => TypeError, "Failed to construct URL: Invalid URL"

}

因為 http ://example.com 是一段非法 URL,跟我們想的一樣,new URL() 拋出了一個 TypeError。


8. 修改 URL

除了獲取 URL 的組成部分以外,像 search,hostname,pathname 和 hash 這些屬性都是可寫的——這也意味著你可以修改 URL。


舉個例子,讓我們把一段 URL 從 red.com 修改成 blue.io:


const url = new URL('http://red.com/path/index.html');


url.href; // => 'http://red.com/path/index.html'


url.hostname = 'blue.io';


url.href; // => 'http://blue.io/path/index.html'

注意,在 URL() 實例中只有 origin 和 searchParams 屬性是只讀的,其他所有的屬性都是可寫的,并且會修改原來的 URL。


9. 總結(jié)

URL() 構(gòu)造函數(shù)是 JavaScript 中的一個能夠很方便地用于解析(或者校驗)URL 的工具。


new URL(relativeOrAbsolute [, absoluteBase]) 中的第一個參數(shù)接收 URL 的絕對路徑或者相對路徑。當(dāng)?shù)谝粋€參數(shù)是相對路徑時,第二個參數(shù)必傳且必須為第一個參數(shù)的基路徑。


在新建 URL() 的實例以后,你就能很輕易地獲得 URL 當(dāng)中的大部分組成部分了,比如:


url.search 獲取原生的 query 字符串

url.searchParams 通過 URLSearchParams 的實例去獲取具體的 query 參數(shù)

url.hostname獲取 hostname

url.pathname 獲取 pathname

url.hash 獲取 hash 值

那么你最愛用的解析 URL 的 JavaScript 工具又是什么呢?

藍(lán)藍(lán)設(shè)計www.0391cbd.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 平面設(shè)計服務(wù)

日歷

鏈接

個人資料

存檔

主站蜘蛛池模板: av一区二区无码在线| 91免费国产高清观看| 亚洲精品动漫在线观看| 国产午夜看片| 久久国产精品夜色| 亚洲精品波多野结衣| 高清免费毛片| 在线观看精品自拍视频| 在线视频精品一区| 色综合天天娱乐综合网| 欧美专区在线观看| 国产丝袜91| 97国内精品久久久久不卡| 中文字幕在线免费看| 无码国内精品人妻少妇蜜桃视频 | 久久久久久久久18禁秘| h网站在线播放| 日本黄色不卡视频| 亚洲国产AV无码综合原创| 国产永久免费视频m3u8| 成年人视频一区二区| 色天天综合| 精品91视频| 亚洲动漫h| 国产精品第一区| 高潮毛片无遮挡高清视频播放| 激情影院内射美女| 欧美国产综合色视频| 日韩毛片免费| 18禁影院亚洲专区| 在线观看精品自拍视频| 国产自无码视频在线观看| 国产成人高清精品免费| 国产免费黄| 国产无码制服丝袜| 在线a视频免费观看| 依依成人精品无v国产| av在线5g无码天天| 无码专区第一页| 国产成人禁片在线观看| 国产在线观看第二页| 色屁屁一区二区三区视频国产| 国产成人综合久久精品下载| 不卡无码网| 欧美亚洲日韩中文| 黄色福利在线| 制服丝袜 91视频| 精品在线免费播放| 又粗又硬又大又爽免费视频播放| 久久国产黑丝袜视频| 国产成人精品第一区二区| 日本亚洲欧美在线| 国产女人在线观看| 日本欧美成人免费| 99热国产这里只有精品无卡顿"| 91成人在线免费视频| 欧美亚洲国产日韩电影在线| 成人福利免费在线观看| 亚洲中文制服丝袜欧美精品| 日韩在线视频网站| 永久天堂网Av| 久久综合结合久久狠狠狠97色| 中国黄色一级视频| 亚洲国产中文精品va在线播放| 最新日韩AV网址在线观看| 在线视频亚洲色图| 国产伦精品一区二区三区视频优播 | 国产又粗又猛又爽视频| 色婷婷天天综合在线| a级毛片在线免费| 国产精品夜夜嗨视频免费视频| 18黑白丝水手服自慰喷水网站| 色噜噜久久| 国产精品永久在线| 欧美黄网站免费观看| 国产精品免费电影| 红杏AV在线无码| 亚洲天堂久久久| 亚洲日本精品一区二区| 国产精品99在线观看| 91精品网站| 亚洲无限乱码|