URL是浏览器原生提供的对象,同时也是一个构造函数,可以用来构造、解析和编码 URL。一般情况下,通过window.URL可以拿到。
构造函数
URL作为构造函数,可以生成 URL 实例。它接受一个表示 URL 的字符串作为参数。如果参数不是合法的 URL,会报错。
var url = new URL('http://www.example.com/index.html');url.href// "http://www.example.com/index.html"
如果参数是另一个 URL 实例,构造函数会自动读取该实例的href属性,作为实际参数。
如果 URL 字符串是一个相对路径,那么需要表示绝对路径的第二个参数,作为计算基准。
var url1 = new URL('index.html', 'http://example.com');url1.href// "http://example.com/index.html"var url2 = new URL('page2.html', 'http://example.com/page1.html');url2.href// "http://example.com/page2.html"var url3 = new URL('..', 'http://example.com/a/b.html')url3.href// "http://example.com/"
实例属性
URL 实例的属性与Location对象的属性基本一致,返回当前 URL 的信息。
- URL.href:返回整个 URL
- URL.protocol:返回协议,以冒号
:结尾 - URL.hostname:返回域名
- URL.host:返回域名与端口,包含
:号,默认的80和443端口会省略 - URL.port:返回端口
- URL.origin:返回协议、域名和端口
- URL.pathname:返回路径,以斜杠
/开头 - URL.search:返回查询字符串,以问号
?开头 - URL.searchParams:返回一个
URLSearchParams实例,该属性是Location对象没有的 - URL.hash:返回片段识别符,以井号
#开头 - URL.password:返回域名前面的密码
- URL.username:返回域名前面的用户名
这些属性里面,只有origin属性是只读的,其他属性都可写。
searchParams
URLSearchParams对象是浏览器的原生对象,用来构造、解析和处理 URL 的查询字符串(即 URL 问号后面的部分)。
它本身也是一个构造函数,可以生成实例。参数可以为查询字符串,起首的问号?有没有都行,也可以是对应查询字符串的数组或对象。
// 方法一:传入字符串var params = new URLSearchParams('?foo=1&bar=2');// 等同于var params = new URLSearchParams(document.location.search);// 方法二:传入数组var params = new URLSearchParams([['foo', 1], ['bar', 2]]);// 方法三:传入对象var params = new URLSearchParams({'foo' : 1 , 'bar' : 2});
静态方法
URL.createObjectURL()
**URL.createObjectURL()** 静态方法会创建一个 [DOMString](https://developer.mozilla.org/zh-CN/docs/Web/API/DOMString),其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 [document](https://developer.mozilla.org/zh-CN/docs/Web/API/Document) 绑定。这个新的URL 对象表示指定的 [File](https://developer.mozilla.org/zh-CN/docs/Web/API/File) 对象或 [Blob](https://developer.mozilla.org/zh-CN/docs/Web/API/Blob) 对象。
URL.createObjectURL()方法用来为上传/下载的文件、流媒体文件生成一个 URL 字符串。这个字符串代表了File对象或Blob对象的 URL。通常将url用于a、img等元素中,常用于下载或展示文件。
实例:从服务器请求得到excel的二进制数据,然后通过创建url下载文件。
import XLSX from "xlsx";/*** @description 将一个sheet转成最终的excel文件的blob对象* @param {XLSX.utils.json_to_sheet} sheet* @returns {String} sheetName*/export function sheetToBlob(sheet, sheetName) {sheetName = sheetName || "sheet1";var workbook = {SheetNames: [sheetName],Sheets: {},};workbook.Sheets[sheetName] = sheet; // 生成excel的配置项var wopts = {bookType: "xlsx", // 要生成的文件类型bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性type: "binary",};var wbout = XLSX.write(workbook, wopts);var blob = new Blob([s2ab(wbout)], {type: "application/octet-stream",}); // 字符串转ArrayBufferfunction s2ab(s) {var buf = new ArrayBuffer(s.length);var view = new Uint8Array(buf);for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;return buf;}return blob;}/*** @description 将sheetToBlob转化的blob对象利用URL.createObjectURL下载为excel文件* @param {ArrayBuffer} blob* @returns {String} saveName*/export function downloadExcel(blob, saveName) {if (typeof blob == "object" && blob instanceof Blob) {var url = URL.createObjectURL(blob); // 创建blob地址}var aLink = document.createElement("a");aLink.href = url;aLink.style.display = "none";aLink.download = saveName || ""; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效document.body.appendChild(aLink);aLink.click();document.body.removeChild(aLink); //下载完成移除元素window.URL.revokeObjectURL(url); //释放掉blob对象}
URL.revokeObjectURL()
URL.revokeObjectURL()方法用来释放URL.createObjectURL()方法生成的 URL 实例。它的参数就是URL.createObjectURL()方法返回的 URL 字符串。
参考
MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/URL/URL
https://wangdoc.com/javascript/bom/location.html
常用操作
键值对拼接成URL参数
const params2Url = (uri, params) => {const paramsArray = [];Object.keys(params).forEach((key) => params[key] && paramsArray.push(`${key}=${params[key]}`));if (uri.search(/\?/) === -1) {uri += `?${paramsArray.join("&")}`;} else {uri += `&${paramsArray.join("&")}`;}return uri;};let params = {keyword: "t",page: 1,size: 2,};params2Url('/datasource/check/p', params)

