能够方便地创建和解析 URL,相当于字符串形式 URL 的更好替代
创建 URL 对象
let url = new URL(url, [base])
- url:完整的 URL,或者仅路径(如果设置了 base)
- base:可选,如果设置了此参数,且参数 url 只有路径,则会根据这个 base 生成 URL
解析
url 对象可以解析其中的组成元素:
searchParams
url.searchParams 是一个 URLSearchParams
类型的对象,是 可迭代对象。它可以非常方便地处理 URL 中的查询字符串相关问题
URL 对象可以替代传统的 字符串URL,如果使用字符串,则需要手动编码/解码特殊字符:
- encodeURI:用来编码整个 URL
- decodeURI:解码
- encodeURIComponent:用来编码 URL 组成部分,例如 search、hash、pathname
- decodeURIComponent:解码
encodeURI 和 encodeURIComponent 区别
编码整个 URL 的话,允许的特殊字符就多一些,如可以包含 /
、:
等等组成 URL 可以包含的字符
编码 URL 组成部分的话,要求就严格一些,很多 URL 中的字符不允许,会被编码
具体区别:
encodeURI()
:不会编码;,/?:@&=+$-_.!~*'()a1#
encodeURIComponent()
:不会编码-_.!~*'()a1
encode* 与 URL 之间的区别
- URL 和 URLSearchParams 基于最新的 URL 规范:RFC3986,而 encode* 函数是基于过时的 RFC2396
- URL 可以正确处理 IPv6 地址,encode* 不行