」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > URL對象

URL對象

發佈於2024-11-08
瀏覽:691

The URL Object

概述

JavaScript 中的 URL 物件提供了一種輕鬆使用和操作 URL 的方法。當您需要在程式碼中建構、解析或修改 URL 時,它特別有用。

很多時候使用模板字串來在 JavaScript 中建立 URL。通常這很簡單且足夠清晰,但 URL 物件是處理 URL 的更強大的 OOP 方法。

甚至OpenWeatherMap.org 在文件中也使用模板字串:https://api.openweathermap.org/data/3.0/onecall?lat={lat}&lon={lon}&exclude={part}&appid= {API key }

對於相當靜態的 URL,這很好,但如果您想更改此 URL,您可能需要考慮使用 URL 物件。

// Using template strings
const lat = 32.087;
const lon = 34.801;
const apiKey = 'your_api_key';
const url = `https://api.openweathermap.org/data/3.0/onecall?lat=${lat}&lon=${lon}&appid=${apiKey}`;

// Using the URL object
const openWeatherUrl = new URL('https://api.openweathermap.org/data/3.0/onecall');
openWeatherUrl.searchParams.set('lat', lat);
openWeatherUrl.searchParams.set('lon', lon);
openWeatherUrl.searchParams.set('appid', apiKey);

基本用法

您可以透過將 URL 字串傳遞給其建構函式來建立新的 URL 物件。

在這種情況下(與上面相反),整個 URL 與各個部分一起傳入:

const url = new URL('https://example.com:8080/path?query=123#section');

特性

URL 物件有幾個屬性,您可以使用它們來存取 URL 的各個部分:

  • href:字串形式的完整 URL。
  • 協議:協議(例如 https:)。
  • 主機名稱:網域名稱(例如 example.com)。
  • port:連接埠號(例如 8080)。
  • 路徑名:網域名稱後面的路徑(例如/path)。
  • search:查詢字串,包括? (例如?query=123)。
  • hash:片段標識符,包括#(例如#section)。
  • 主機:主機名稱和連接埠組合(例如 example.com:8080)。
  • origin:URL 的來源,即協定、主機名稱和連接埠。
> const url = new URL('https://example.com:8080/path?query=123#section');
> url.port
'8080'
> url.protocol
'https:'
> url.hostname
'example.com'
> url.pathname
'/path'
> url.search
'?query=123'
> url.hash
'#section'
> url.host
'example.com:8080'

這些也可用於更改 URL 的不同部分? :

> url.port = 1234
1234
> url.pathname = "differentpath"
'differentpath'
> url.hostname = "example.org"
'example.org'
> url
URL {
  href: 'https://example.org:1234/differentpath?query=123#section',
  origin: 'https://example.org:1234',
  protocol: 'https:',
  username: '',
  password: '',
  host: 'example.org:1234',
  hostname: 'example.org',
  port: '1234',
  pathname: '/differentpath',
  search: '?query=123',
  searchParams: URLSearchParams { 'query' => '123' },
  hash: '#section'
}

方法

URL物件還有一些方法可以幫助修改URL並與URL互動。

例如,URL 搜尋參數 是一個鍵值對,用於通知 API 伺服器詳細資訊以服務使用者。

url.searchParams:傳回 URLSearchParams 對象,該對象提供使用查詢字串參數的方法。你可以:

取得查詢參數:url.searchParams.get('query')
設定查詢參數: url.searchParams.set('query', '456')
刪除查詢參數: url.searchParams.delete('query')

迭代查詢參數:

url.searchParams.forEach((value, key) => {
  console.log(key, value);
});

toString():以字串形式傳回完整 URL,反映對屬性或查詢參數所做的任何變更。

開放天氣圖 API 範例

以下是 OpenWeatherMap 的文檔:https://openweathermap.org/api/one-call-3

這是一個簡單的範例,展示如何建立 URL 物件並操作其各個部分:

// get values to interpolate to URL
const apiKey = process.env.openWeatherApiKey || 0
const [lat, lon] = [32.08721095615897, 34.801588162316506]

const openWeatherUrl = new URL("https://api.openweathermap.org")

openWeatherUrl.pathname = "data/3.0/onecall"
openWeatherUrl.searchParams.set('lat',lat)
openWeatherUrl.searchParams.set('lon',lon)

// from the docs
openWeatherUrl.searchParams.set('exclude', 'hourly')

openWeatherUrl.searchParams.set('appid', apiKey)

console.log(openWeatherUrl)

輸出:

URL {
  href: 'https://api.openweathermap.org/data/3.0/onecall?lat=32.08721095615897&lon=34.801588162316506&exclude=hourly&appid=0',
  origin: 'https://api.openweathermap.org',
  protocol: 'https:',
  username: '',
  password: '',
  host: 'api.openweathermap.org',
  hostname: 'api.openweathermap.org',
  port: '',
  pathname: '/data/3.0/onecall',
  search: '?lat=32.08721095615897&lon=34.801588162316506&exclude=hourly&appid=0',
  searchParams: URLSearchParams {
    'lat' => '32.08721095615897',
    'lon' => '34.801588162316506',
    'exclude' => 'hourly',
    'appid' => '0' },
  hash: ''
}

概括

JavaScript 中的 URL 物件提供了一種處理 URL 的結構化方法,可輕鬆操作和建立複雜的 URL。雖然模板字串對於靜態 URL 來說簡單且有效,但 URL 物件對於 URL 是動態的或需要頻繁修改的情況來說是理想的選擇。


照片由 Anne Nygård 在 Unsplash 上拍攝

版本聲明 本文轉載於:https://dev.to/wolfmath/the-url-object-3485?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何在 Golang Web 伺服器中串流 MP4 影片?
    如何在 Golang Web 伺服器中串流 MP4 影片?
    GoLang Web 伺服器串流影片GoLang Web 伺服器串流影片GoLang Web 伺服器串流影片問:Golang Web 伺服器設定為服務HTML、CSS、JavaScript 和映像失敗嘗試串流式傳輸MP4 視訊。 if contentType == "video/mp4&q...
    程式設計 發佈於2024-11-14
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-14
  • CSS 中的「display: table-column」實際上做了什麼?
    CSS 中的「display: table-column」實際上做了什麼?
    CSS「display: table-column」該如何運作? 在 HTML 中,表格由行組成,每行含有細胞。 CSS 擴展了這個概念,讓設計者定義特定的行和列佈局。雖然「display: table-row」和「display: table-cell」很簡單,但「display: table-c...
    程式設計 發佈於2024-11-14
  • Babel 6 如何以不同的方式處理預設導出?
    Babel 6 如何以不同的方式處理預設導出?
    重大變更:Babel 6 匯出預設行為隨著 Babel 6 的發布,預設導出的處理方式發生了重大變化。雖然 Babel 之前新增了 module.exports = Exports["default"] 行,但此功能已被刪除。 此修改需要更改模組導入語法。以前,使用舊語法的程式碼...
    程式設計 發佈於2024-11-14
  • 掌握 Next.js 中的 SSR:如何提升 SEO 與使用者體驗
    掌握 Next.js 中的 SSR:如何提升 SEO 與使用者體驗
    SSR(伺服器端渲染)是 Next.js 中產生頁面的另一種方法。在本文中,我想解釋什麼是 SSR、它是如何運作的,以及如何在 Next.js 專案的 Page Router 和 App Router 中實現它。 什麼是SSR? SSR是一種在使用者發出請求後產生靜態頁面(或預先渲...
    程式設計 發佈於2024-11-14
  • 為什麼 PHP 5.2 不允許抽象靜態類別方法?
    為什麼 PHP 5.2 不允許抽象靜態類別方法?
    PHP 5.2 嚴格模式:為什麼不允許抽象靜態類別方法? 在 PHP 5.2 中,啟用嚴格警告可能會觸發熟悉的警告:「靜態函數不應該是抽象的」。此警告源自於 PHP 5.2 中引入的一項更改,該更改不允許抽象靜態類別方法。 原因:歷史監督PHP 5.2 最初缺乏後期靜態綁定,使抽象靜態函數變得無用。...
    程式設計 發佈於2024-11-14
  • 如何為 10 個連續點的每段繪製不同顏色的線?
    如何為 10 個連續點的每段繪製不同顏色的線?
    用不同的顏色繪製一條線問題陳述給定兩個列表,latt和lont,目標是繪製一條線,其中每個清單10個連續點的線段以不同的顏色表示。 解決方案解決方案線段數量有限import numpy as np import matplotlib.pyplot as plt # Generate random c...
    程式設計 發佈於2024-11-14
  • 如何在 MySQL 中根據計數過濾資料而不使用嵌套 SELECT?
    如何在 MySQL 中根據計數過濾資料而不使用嵌套 SELECT?
    MySQL - 在WHERE 子句中使用COUNT(*)使用者在嘗試使用WHERE 子句中的COUNT(*) 函數過濾MySQL 中的資料時遇到了挑戰WHERE 子句。他們尋求一種有效的方法來完成此任務,而不使用巢狀 SELECT 語句,因為它會消耗大量資源。 使用者提供了以下偽代碼來說明他們期望的...
    程式設計 發佈於2024-11-14
  • 如何在 Python 中按名稱存取 SQL 結果列值?
    如何在 Python 中按名稱存取 SQL 結果列值?
    在Python 中按列名稱存取SQL 結果列值處理資料庫中的大量列時,依賴列索引資料來擷取可能會變得很麻煩。本文透過提供一種在 Python 中使用列名稱檢索 SQL 結果列值的方法來解決對更直觀方法的需求。 解決方案:利用 DictCursor Python 的 MySQLdb 模組提供了 Dic...
    程式設計 發佈於2024-11-14
  • 何時使用 Django ORM 的 select_lated 與 prefetch_lated?
    何時使用 Django ORM 的 select_lated 與 prefetch_lated?
    Django ORM 的 select_lated 和 prefetch_lated 之間的區別在 Django ORM 中,select_lated 和 prefetch_lated 方法在管理資料庫查詢中的關係方面具有不同的用途。 select_latedDjango的select_lated方...
    程式設計 發佈於2024-11-14
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-14
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-13
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1和$array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建構一...
    程式設計 發佈於2024-11-13
  • 使用 Python 將 .png 檔案從一個資料夾移到另一個資料夾
    使用 Python 將 .png 檔案從一個資料夾移到另一個資料夾
    嘗試之前;請確保您的電腦上安裝了 python。 在 python IDE 中,您需要先匯入 pathlib 和 os 函式庫。兩者都是 python 標準函式庫的一部分,因此不需要外部安裝。 1.)導入必要的函式庫(pathlib和os)。 2.)找到桌面的路徑。 3.) 建立一個名為「S...
    程式設計 發佈於2024-11-13
  • Node.js 流:什麼、為什麼以及如何使用它們
    Node.js 流:什麼、為什麼以及如何使用它們
    高效处理大数据对于现代 Web 应用程序至关重要。将整个文件加载到内存中的传统方法对于处理大量数据来说并不是最佳选择。这就是 Node.js 中的 Streams 派上用场的地方。它们允许您逐段(以块的形式)处理数据,从而提高性能、减少内存使用并提高效率。在本文中,我们将探讨什么是流、为什么它们很重...
    程式設計 發佈於2024-11-13

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3