作者簡介:
李中凱
八年多工作經驗 前端負責人,
擅長JavaScript/Vue。
掘金文章專欄:KaysonLi 的個人主頁 - 專欄 - 掘金
前端開發人員對window.location
對象應該不陌生,通過它不但可以獲取當前頁面的地址信息,還可以修改某些屬性,實現頁面跳轉和刷新等。
我們以一個常見的 URL 為例,看看window.location
包含哪些屬性和方法。
window.location.href → 'https://www.jianshu.com/search?q=JS#comments' .origin → 'https://www.jianshu.com' .protocol → 'https:' .host → 'www.jianshu.com' .hostname → 'www.jianshu.com' .port → '' .pathname → '/search/' .search → '?q=JS' .hash → '#comments'window.location.assign('url') .replace('url') .reload() .toString()
同事寫的很優秀的代碼
附帶代碼
function formatHashPath(_path, _params = {}) { const { origin, pathname, hash } = window.location; const [realHash, query] = hash.split('?'); const queryObj = qs.parse(query); const queryString = qs.stringify({ ...queryObj, ..._params, disableNav: 'NO', }); const result = `${origin}${pathname}${realHash || ''}${_path || ''}?${queryString || ''}`; return result;}
window.location
含義.origin
URL 基礎地址,包括協議名、域名和端口號.protocol
協議 (http:
或https:
).host
域名+端口號.hostname
域名.port
端口號.pathname
路徑(以/
開頭).search
查詢字符串,以?
開頭.hash
頁面錨點,以#
開頭.href
完整 URL
比較容易混淆的是host
和hostname
這兩個屬性,區別是前者還包含了端口號。
以上屬性除了origin
是只讀屬性,其他都可以修改。修改后的效果就是跳轉到相應的新地址。
window.location.protocol = 'https' .host = 'localhost:8080' .hostname = 'localhost' .port = '8080' .pathname = 'path' .search = 'q=vue' // (不需要帶 ?) .hash = 'target' // (不需要帶 #) .
window.location
返回Location
類型的一個實例對象,包含當前頁面的地址信息??梢酝ㄟ^以下幾種方式訪問:
window.location → Locationwindow.document.location → Locationdocument.location → Locationlocation → Location
這幾個變量都是等價的,因為它是全局變量。但是建議避免直接用location
變量,因為很容易跟其他局部變量混淆,造成不必要的麻煩。比如:
location.protocol; // 'https'function localFile() { const location = '/vue'; return location.protocol; // ? undefined // 這里的局部變量 "location"覆蓋了全局變量}
推薦用window.location
,這樣一眼就可以看出用的是全局變量。
window.location
動作
.assign()
導航到指定 URL.replace()
導航到指定 URL并刪除當前頁面的訪問記錄.reload()
重新加載當前頁面.toString()
返回 URL 字符串
.toString()
和.href
都是返回 URL,它們之間有區別嗎?結果是一樣的,性能上稍微有點差別。通過 JSPerf 上的性能測試結果可以看出,.href
稍快,通過window.location
拼接字符串的形式速度最慢。
.assign()
和直接修改href
是等價的,那么它們跟.replace()
的區別是什么呢?
.assign()
在跳轉新地址的同時會留下當前頁面的訪問記錄,點擊瀏覽器返回按鈕會回到原來的頁面,.replace()
則不會保留。
.assign()
執行流程:
1. 打開空白頁2. 訪問 www.kaysonli.com (當前頁)3. 加載新頁面 `window.location.assign('https://www.w3schools.com')`4. 點擊瀏覽器返回按鈕5. 回到 www.kaysonil.com
.replace()
執行流程:
1. 打開空白頁2. Go to www.kaysonli.com (當前頁)3. 加載新頁面 `window.location.assign('https://www.w3schools.com')`4. 點擊瀏覽器返回按鈕5. 回到 空白頁
這個特性在用 JS 控制頁面導航時非常重要,稍不注意會造成意外的的頁面回退地址。.
作者簡介:
李中凱
八年多工作經驗 前端負責人,
擅長JavaScript/Vue。
掘金文章專欄:KaysonLi 的個人主頁 - 專欄 - 掘金
本文已經獲得李中凱老師授權轉發,其他人若有興趣轉載,請直接聯系作者授權。
更多的學習資料,請看這里:
http://www.jnshu.com/login/1/36856070?source=zhihu-article-lizhongkai
發布于 2020-06-19 21:48 漫思本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
北京西站換乘火車最晚買票時間?北京西站24小時售票,買票沒有最晚時間。開車前提前五分鐘停止檢票上車就行了。如果在北京西站換車,網上買票,不需要出站,省去了來回拖行李。直接檢票上車。北京西站售票廳營業時間?北京西站售票處24小時開放。工作人員24小時輪班,但是售票窗口晚上不像白天那么開放。北京西站共設91個售票窗口,分別位于車站北大廳南大廳地下一層和二層。在此基礎上,車站在南北廣場東西售票廳北二層入...
32寸液晶電視尺寸?32寸電視一般包括底座尺寸:751*516*200(寬、高、厚),單屏尺寸:751*466*63.7(寬、高、厚)。32寸液晶電視的屏幕尺寸(以4:3的比例計算)長65.024cm,寬48.768cm (16:9),長69cm,寬39cm。通常大部分品牌的32寸電視的屏占比都是16,333,609。32寸液晶電視尺寸是多少?32英寸液晶電視尺寸:長65.024厘米,寬48.7...
安徽八大名酒是哪八大?八大名酒是顧靖酒廠、口子窖、迎駕酒廠、宣酒、濉溪大曲、明光大曲、稻花香大曲、阜陽大曲等。,其中前四個最有名,在都很有名。安徽八大名酒是哪八大?1:安徽口子窖2.安徽顧靖酒廠3.安徽宣酒4.安徽迎駕酒廠5.安徽王文酒廠6:安徽醉三秋7.安徽皖酒8:安徽太和寺龍酒安徽八大名酒是哪八大?安徽名酒品牌有限公司。;黃金不能改變葡萄酒。 "金不換 "系列白酒有品、寶、精、綿、雅、香等30...