本节,主要分为两部分,一是针对访问路径的 URL,另一是针对访问路径参数的 URLSearchParams。
1.URL
内建的 URL 类提供了用于创建和解析 URL 的便捷接口。
1-1.基本使用
js
new URL(url, [baseUrl])参数含义如下:
url必选项,可以是一个合法的url路径,或者普通路径(此条件必须声明baseUrl参数)。baseUrl可选参数。如果url不是一个合法的url路径,则需要提供baseUrl选项以明确基础路径。
返回值是一个 URL 实例对象。
js
// work
var url = 'http://jsgoshu.cn/module/a'
console.log(new URL(url))js
// error 缺少baseUrl参数
var url = './module/a'
console.log(new URL(url)) // Failed to construct 'URL': Invalid URLjs
// work
var url = './module/a'
var base = 'http://jsgoshu.cn/engineer/'
console.log(new URL(url, base))1-2.实例属性
本节说明 URL 的实例对象。
以下述代码为例:
js
var url = './module/a?type=something#target'
var base = 'http://jsgoshu.cn/engineer/'
console.log(new URL(url, base))控制台打印如下图:

各个属性的含义如下图所示:
除此之外,实例属性中还有个 searchParams 特殊属性。
可以看出,该属性是 URLSearchParams 的实例。
关于该属性的详细内容,可见下章。
1-3.静态方法
URL 类上的静态方法有以下:

即:
createObjectURLrevokeObjectURL
这两种方法,经常用于创建 BlobURL
2.URLSearchParams
URLSearchParams,顾名思义,它指的是,路径查询参数。
它的实例,可调用 toString() 方法,转为字符串后,结果类似这种形式 name=Jack&age=19&...。
2-1.基础使用
直接利用:
js
var urlSearchParams = new URLSearchParams()即可创建一个 URLSearchParams 实例。打印如下:

可以看出
- 该实例具有一系列方法操作属性,
set、append、delete、set、get、getAll、has等。 - 该实例可迭代。此外也具有
entries、keys、values等迭代方法
js
var urlSearchParams = new URLSearchParams()
urlSearchParams.set('name', 'Jack')
urlSearchParams.set('name', 'Tom')
urlSearchParams.append('name', 'Jerry')
urlSearchParams.set('age', '19')
urlSearchParams.set('text', 'Hello world')
var keys = urlSearchParams.keys()
// name name age text
for (var k of keys) {
console.log(k)
}
// name=Tom&name=Jerry&age=19&text=Hello+world
console.log(urlSearchParams.toString())2-2.url.searchParams
通过 URL 创建的实例,其属性 searchParams 也是 URLSearchParams 构造函数的实例。
譬如:
js
var url = './module/a?type=something#target'
var base = 'http://jsgoshu.cn/engineer/'
console.log(new URL(url, base))控制台打印如下图:

所以,url.searchParams 属性的操作形式与 urlSearchParams 完全一致。
TIP
此处,
url代指URL的实例。urlSearchParams代指URLSearchParams的实例。
3.URL路径的转码与解码
URL 路径的转码与解码方式,目前最常使用的有两类
encodeURIdecodeURI
或
encodeURIComponentdecodeURIComponent
假设有两类路径:
https://jsgoshu.cn/javascripthttps://jsgoshu.cn/javascript?type=ecma&script&str=hello world
使用 encodeURI :
js
var host = 'https://jsgoshu.cn/javascript'
var url = 'https://jsgoshu.cn/javascript?type=ecma&script&str=hello world'
// https://jsgoshu.cn/javascript
console.log(window.encodeURI(host))
// https://jsgoshu.cn/javascript?type=ecma&script&str=hello%20world
console.log(window.encodeURI(url))使用 encodeURIComponent :
js
var host = 'https://jsgoshu.cn/javascript'
var url = 'https://jsgoshu.cn/javascript?type=ecma&script&str=hello world'
// https%3A%2F%2Fjsgoshu.cn%2Fjavascript
console.log(window.encodeURIComponent(host))
// https%3A%2F%2Fjsgoshu.cn%2Fjavascript%3Ftype%3Decma%26script%26str%3Dhello%20world
console.log(window.encodeURIComponent(url))在实际开发中,encodeURIComponent 比 encodeURI 的使用范围要更普遍。
因为可以利用 encodeURIComponent 转义 urlSearchParams 以保证参数正确。
关于二类编码方式更多的详细,可参见本站之前的相关记录