能够方便地创建和解析 URL,相当于字符串形式 URL 的更好替代

创建 URL 对象

let url = new URL(url, [base])

  • url:完整的 URL,或者仅路径(如果设置了 base)
  • base:可选,如果设置了此参数,且参数 url 只有路径,则会根据这个 base 生成 URL

解析

url 对象可以解析其中的组成元素: 700

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* 不行