前端必備基礎(chǔ)知識:window.location 詳解

作者簡介:
李中凱
八年多工作經(jīng)驗 前端負責(zé)人旨巷,
擅長JavaScript/Vue。
掘金文章專欄:https://juejin.im/user/57c7cb8a0a2b58006b1b8666/posts
公眾號:1024譯站

前端開發(fā)人員對 window.location對象應(yīng)該不陌生添忘,通過它不但可以獲取當前頁面的地址信息采呐,還可以修改某些屬性,實現(xiàn)頁面跳轉(zhuǎn)和刷新等搁骑。

我們以一個常見的 URL 為例斧吐,看看window.location包含哪些屬性和方法。

window.location.href     → 'http://www.reibang.com/search?q=JS#comments'               .origin   → 'http://www.reibang.com'               .protocol → 'https:'               .host     → 'www.reibang.com'               .hostname → 'www.reibang.com'               .port     → ''               .pathname → '/search/'               .search   → '?q=JS'               .hash     → '#comments'
window.location.assign('url')               .replace('url')               .reload()               .toString()

window.location 屬性一覽表

window.location 含義
.origin URL 基礎(chǔ)地址仲器,包括協(xié)議名煤率、域名和端口號
.protocol 協(xié)議 (http:https:)
.host 域名+端口號
.hostname 域名
.port 端口號
.pathname 路徑(以/開頭)
.search 查詢字符串,以?開頭
.hash 頁面錨點乏冀,以#開頭
.href 完整 URL

比較容易混淆的是hosthostname這兩個屬性蝶糯,區(qū)別是前者還包含了端口號。

修改屬性值

以上屬性除了origin是只讀屬性煤辨,其他都可以修改裳涛。修改后的效果就是跳轉(zhuǎn)到相應(yīng)的新地址木张。

window.location.protocol = 'https'               .host     = 'localhost:8080'               .hostname = 'localhost'               .port     = '8080'               .pathname = 'path'               .search   = 'q=vue' // (不需要帶 ?)               .hash     = 'target' // (不需要帶 #)               .

如何訪問 Location 對象

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 方法一覽表

| window.location | 動作
|
| --- | --- |
| .assign() | 導(dǎo)航到指定 URL |
| .replace() | 導(dǎo)航到指定 URL并刪除當前頁面的訪問記錄 |
| .reload() | 重新加載當前頁面 |
| .toString() | 返回 URL 字符串 |

.toString().href都是返回 URL欢摄,它們之間有區(qū)別嗎熬丧?結(jié)果是一樣的,性能上稍微有點差別怀挠。通過 JSPerf 上的性能測試結(jié)果可以看出析蝴,.href稍快,通過window.location拼接字符串的形式速度最慢绿淋。

image

<figcaption style="margin: 10px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box; overflow-wrap: break-word !important; font-size: 0.7em; color: rgb(153, 153, 153); line-height: inherit; text-align: center;">性能對比</figcaption>

.assign() 和直接修改href是等價的金顿,那么它們跟.replace()的區(qū)別是什么呢毛肋?

.assign() 在跳轉(zhuǎn)新地址的同時會留下當前頁面的訪問記錄,點擊瀏覽器返回按鈕會回到原來的頁面双戳,.replace()則不會保留猪狈。

.assign()執(zhí)行流程:

1. 打開空白頁2. 訪問 www.kaysonli.com (當前頁)3. 加載新頁面 ?? `window.location.assign('https://www.w3schools.com')`4. 點擊瀏覽器返回按鈕5. 回到?? www.kaysonil.com

.replace()執(zhí)行流程:

1. 打開空白頁2. Go to www.kaysonli.com (當前頁)3. 加載新頁面 ?? `window.location.assign('https://www.w3schools.com')`4. 點擊瀏覽器返回按鈕5. 回到 ?? 空白頁

這個特性在用 JS 控制頁面導(dǎo)航時非常重要叭莫,稍不注意會造成意外的的頁面回退地址问窃。

作者簡介:
李中凱
八年多工作經(jīng)驗 前端負責(zé)人谨朝,
擅長JavaScript/Vue。
掘金文章專欄:https://juejin.im/user/57c7cb8a0a2b58006b1b8666/posts
公眾號:1024譯站

本文已經(jīng)獲得李中凱老師授權(quán)轉(zhuǎn)發(fā)组贺,其他人若有興趣轉(zhuǎn)載凸舵,請直接聯(lián)系作者授權(quán)祖娘。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末失尖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子渐苏,更是在濱河造成了極大的恐慌掀潮,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琼富,死亡現(xiàn)場離奇詭異仪吧,居然都是意外死亡,警方通過查閱死者的電腦和手機鞠眉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門薯鼠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來择诈,“玉大人,你說我怎么就攤上這事出皇⌒呱郑” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵郊艘,是天一觀的道長荷科。 經(jīng)常有香客問我,道長纱注,這世上最難降的妖魔是什么畏浆? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮狞贱,結(jié)果婚禮上刻获,老公的妹妹穿的比我還像新娘。我一直安慰自己瞎嬉,他們只是感情好将鸵,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著佑颇,像睡著了一般顶掉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挑胸,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天痒筒,我揣著相機與錄音,去河邊找鬼茬贵。 笑死簿透,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的解藻。 我是一名探鬼主播老充,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼螟左!你這毒婦竟也來了啡浊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤胶背,失蹤者是張志新(化名)和其女友劉穎巷嚣,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钳吟,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡廷粒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坝茎。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡涤姊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嗤放,到底是詐尸還是另有隱情砂轻,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布斤吐,位于F島的核電站搔涝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏和措。R本人自食惡果不足惜庄呈,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望派阱。 院中可真熱鬧诬留,春花似錦、人聲如沸贫母。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腺劣。三九已至绿贞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間橘原,已是汗流浹背籍铁。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留趾断,地道東北人拒名。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像芋酌,于是被迫代替她去往敵國和親增显。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355