浏览器和Node.js都有一个全局类型URL,使用new URL可以新建一个url实例,便于对链接进行解析。
new URL()的第一个参数可以是绝对路径或相对路径,如下是一个绝对路径示例:
let url = new URL("https://example.com:8000/path/file.txt?key=value")
如果是相对路径,则必须将主机名和端口作为第二个参数:
let url = new URL("/path/file.txt?key=value", "https://example.com:8000")
生成了url对象后,就可以得到各个部分了,包括:
- url.href: 完整链接,例如https://example.com:8000/path/file.txt?key=value。
- url.host:主机名和端口,例如example.com:8000。
- url.protocol: 协议,例如https。
- url.port:端口,例如8000。
- url.host:主机名,例如example.com。
- url.pathname:路径,例如/path/file.txt。
- url.searchParams:查询参数对象。
查询参数对象url.searchParams是一个包含键值对的对象,可以获取、设置、添加、删除键值对。例如:
// 获取键对应的值:
url.searchParams.get("key")
// 修改键的值:
url.searchParams.set("key","newValue")
// 查看是否存在某个键:
url.searchParams.has("key")
// 添加一个键值对:
url.searchParams.append("ke2","value2")
// 删除一个键值对:
url.searchParams.delete("ke2","value2")
另外,很多时候需要对链接中的中文字符或空格字符进行编解码,这主要用到两个内置函数:
- encodeURI() : 将非ASCII字符编码成机器可读的字符。
- decodeURI() : 将ASCII反转成人类可读的字符。
这两个函数的用法是如下;
console.log(encodeURI('你好 世界'))
// out: %E4%BD%A0%E5%A5%BD%20%E4%B8%96%E7%95%8C
// 20%表示空格
console.log(decodeURI('%E4%BD%A0%E5%A5%BD%20%E4%B8%96%E7%95%8C'))
// out: 你好 世界