JavaScript中你可能不知道URL构造函数的属性

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: JavaScript中你可能不知道URL构造函数的属性

URL


URL 是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它,

在 Web 开发中,有许多情况需要解析 URL,这篇主要学习如何使用 URL 对象实现这一点

例如,这里是这篇博客文章的路径:


https://www.vipbic.com/thread.html?id=101


通常您需要访问 URL 的特定属性。这些可能是主机名(例如 vipbic.com ) ,或者路径名(例如/thread)


JavaScript用于访问URL对象的提供一个URL()构造函数,很方便解析


一个完整URL


用一张图片来解释,没有太多的文字描述,在下面的图片中你可以找到一个 URL 的主要包含属性:


image.png

URL constructor


URL ()是一个 constuctor 函数,它可以解析 URL 的对象:


const url = newURL(relativeOrAbsolute [, absoluteBase]);


relativeOrAbsolute参数可以是绝对 URL,也可以是相对 URL。如果第一个参数是相对的,那么第二个参数 absoluteBase 必须是绝对 URL,它必须是第一个参数的基础

例如,让我们用一个绝对 URL 初始化 URL():


const url = new URL('http://example.com/path/index.html');
url.href; // => 'http://example.com/path/index.html'


或者合并相对和绝对的 url:


const url = new URL('/path/index.html', 'http://example.com');
url.href; // => 'http://example.com/path/index.html'


创建 URL ()实例后,可以访问实例:


interface URL {
  href:     USVString;
  protocol: USVString;
  username: USVString;
  password: USVString;
  host:     USVString;
  hostname: USVString;
  port:     USVString;
  pathname: USVString;
  search:   USVString;
  hash:     USVString;
  readonly origin: USVString;
  readonly searchParams: URLSearchParams;
  toJSON(): USVString;
}


可以尝试在浏览中打印


image.png

Query string


Search 属性访问前缀为? : 的 URL 的查询字符串:


const url = new URL(
  'http://example.com/path/index.html?message=hello&who=world'
);
url.search; // => '?message=hello&who=world'


如果查询字符串不存在的字符串,url.search 将返回为空字符串” :


const url1 = new URL('http://example.com/path/index.html');
const url2 = new URL('http://example.com/path/index.html?');
url1.search; // => ''
url2.search; // => ''


Parsing query string



image.png

访问查询参数比访问原始查询字符串更方便


一种简单的查询参数选择方法提供了 url.searchParams 属性,该属性包含 URLSearchParams 的实例


URLSearchParams 对象提供了许多方法(如 get (param)、 has (param))来访问查询字符串参数


看一个例子:


const url = new URL(
  'http://example.com/path/index.html?message=hello&who=world'
);
url.searchParams.get('message'); // => 'hello'
url.searchParams.get('missing'); // => null
get.('message'),返回消息查询参数的值-‘ hello’,当去尝试,访问一个不存在的参数 url.searchParams.get('missing')的结果为 null


hostname


Hostname 属性包含 URL 的主机名:


const url = new URL('http://example.com/path/index.html');
url.hostname; // => 'example.com'


pathname


属性获取 URL 的路径名:


const url = new URL('http://example.com/path/index.html?param=value');
url.pathname; // => '/path/index.html'


如果 URL 没有路径,URL.pathname 属性将返回斜杠字符/:


const url = new URL('http://example.com/');
url.pathname; // => '/'


hash



可以使用 url.hash 属性访问#后面的参数:


const url = new URL('http://example.com/path/index.html#bottom');
url.hash; // => '#bottom'


当 URL 中的散列#时,URL.hash 计算为空字符串” :


const url = new URL('http://example.com/path/index.html');
url.hash; // => ''


URL validation


当new URL ()构造函数创建一个实例时,作为副作用,它还验证 URL 的正确性。如果 URL 值无效,则抛出 TypeError


例如,http ://example. com 是一个无效的 URL,因为 http 后面的空格字符

让我们使用这个无效的 URL 来初始化解析器:


因为'http ://example. com'是一个无效的 URL,正如预期的那样,new URL ('http ://example. com')抛出一个 TypeError


URL manipulation


除了访问 URL 属性之外,搜索、主机名、路径名、hash等属性都是可写的ーー因此您可以操作 URL


例如,让我们把现有 URL 的主机名从 red. com 修改为 blue.io:


const url = new URL('http://red.com/path/index.html');
url.href; // => 'http://red.com/path/index.html'
url.hostname = 'blue.io';
url.href; // => 'http://blue.io/path/index.html'


注意,只有 URL ()实例的 origin searchParams 属性是只读的。其他的都是可写的,当你改变它们的时候可以修改 URL


总结


URL()构造函数可以方便地在 JavaScript 中解析(和验证) URL


new URL (relativeOrAbsolute [ ,absolute base ])接受作为第一个参数的绝对或相对 URL。如果第一个参数是相对的,则必须将第二个参数指


示为一个作为第一个参数基础的URL


创建 URL()实例后,可以获取到以下实列方法


  • url.search 原始查询字符串
  • url.searchParams 选择查询字符串参数
  • url.hostname 访问主机名
  • url.pathname 读取路径名
  • url.hash #后面的参数
相关文章
|
29天前
|
监控 JavaScript 前端开发
确定使用 `defer` 属性还是 `async` 属性来异步加载 JavaScript
【10月更文挑战第24天】选择使用 `defer` 属性还是 `async` 属性来异步加载 JavaScript 是一个需要综合考虑多个因素的决策。需要根据脚本之间的依赖关系、页面加载性能要求、脚本的功能和重要性等因素来进行权衡。在实际应用中,需要通过测试和验证来确定最适合的加载方式,以提供更好的用户体验和页面性能。
|
1月前
|
JavaScript 前端开发 索引
JavaScript获取url网址中域名后面的部分
如何截取 url 中网站域名之后的部分,需要用到以下几个方法:
81 3
|
29天前
|
监控 JavaScript 前端开发
使用 `defer` 属性异步加载 JavaScript
【10月更文挑战第24天】使用 `defer` 属性异步加载 JavaScript 是一种有效的提高页面性能和用户体验的方法。通过合理设置 `defer` 属性,可以在不影响页面渲染的情况下异步加载脚本,并确保脚本的执行顺序。在实际应用中,需要根据具体情况选择合适的加载方式,并注意处理可能出现的问题,以确保页面能够正常加载和执行。
|
2月前
|
存储 开发框架 JavaScript
Node.js实现短链接(ShortLink):shortid、epxress让URL更简单
Node.js实现短链接(ShortLink):shortid、epxress让URL更简单
61 0
Node.js实现短链接(ShortLink):shortid、epxress让URL更简单
|
2月前
|
移动开发 JavaScript 前端开发
原生js如何获取dom元素的自定义属性
原生js如何获取dom元素的自定义属性
66 4
|
2月前
|
缓存 JavaScript 前端开发
探索Vue.js中的计算属性与侦听器
【10月更文挑战第5天】探索Vue.js中的计算属性与侦听器
24 1
|
2月前
|
存储 JavaScript 前端开发
js中map属性
js中map属性
21 0
|
2月前
|
缓存 JavaScript 前端开发
深入理解Vue.js中的计算属性与侦听属性
【10月更文挑战第5天】深入理解Vue.js中的计算属性与侦听属性
29 0
|
5月前
|
JavaScript
js 获取并解析 url 中参数的三种方法
js 获取并解析 url 中参数的三种方法
503 0
|
JavaScript
JS解析url中的参数
JS解析url中的参数
209 0