自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

面試官:SessionStorage可以在多個Tab之間共享數(shù)據(jù)嗎?

開發(fā) 前端
最近,我的一個朋友在面試時被一個關(guān)于sessionStorage的問題難住了。好吧,我必須承認(rèn),我對此并不熟悉。面試題是:sessionStorage可以在多個選項卡之間共享數(shù)據(jù)嗎?

最近,我的一個朋友在面試時被一個關(guān)于sessionStorage的問題難住了。

好吧,我必須承認(rèn),我對此并不熟悉。

面試題是:sessionStorage可以在多個選項卡之間共享數(shù)據(jù)嗎?

具體面試中涉及到的一些問題與面試流程

問題1:“你知道localStorage和sessionStorage有什么區(qū)別嗎?”

我的朋友:他感到很高興,因為這是任何一個前端開發(fā)工程師都知道的知識。

localStorage的數(shù)據(jù)是持久化的,只要我們不主動清除它,它就會一直存在。

關(guān)閉選項卡/窗口會結(jié)束會話并清除 sessionStorage 中的對象。

問題二:同一個網(wǎng)站下localStorage可以共享數(shù)據(jù)嗎?

我的朋友:“這又是一件簡單的事!數(shù)據(jù)可以在同一網(wǎng)站下的不同選項卡或窗口之間共享”

// Let's try to set a name in window 1 page 1
localStorage.setItem('name', 'fatfish')
// We try to read the current name in window 2 page 2
localStorage.getItem('name') // fatfish

面試官對我朋友說,你太棒了,我想再問你一個面試題,于是就有了第三個面試題。

問題3:sessionStorage可以在多個選項卡之間共享數(shù)據(jù)嗎?”

我的朋友:“不,每個窗口或選項卡都有一個單獨的sessionStorage,它們之間沒有數(shù)據(jù)共享”

面試官:“你真的確定是這樣嗎?”

我的朋友:“呃!我不確定,也許吧!”

也許,我的朋友因為這個問題而錯過了offer,但作為一名開發(fā)人員,我們需要不斷提高我們的知識和技能。

什么是會話存儲?

來自 MDN:只讀 sessionStorage 屬性訪問當(dāng)前源的會話存儲對象。sessionStorage與localStorage類似;不同之處在于,localStorage 中的數(shù)據(jù)不會過期,而 sessionStorage 中的數(shù)據(jù)會在頁面會話結(jié)束時被清除。

每當(dāng)文檔加載到瀏覽器的特定選項卡中時,就會創(chuàng)建一個唯一的頁面會話并將其分配給該特定選項卡。該頁面會話僅對特定選項卡有效。

只要選項卡或瀏覽器打開,頁面會話就會持續(xù),并且在頁面重新加載和恢復(fù)后仍然存在。

在新選項卡或窗口中打開頁面會創(chuàng)建一個具有頂級瀏覽上下文值的新會話,這與會話 cookie 的工作方式不同。

使用相同的 URL 打開多個選項卡/窗口會為每個選項卡/窗口創(chuàng)建 sessionStorage。

復(fù)制選項卡會將選項卡的 sessionStorage 復(fù)制到新選項卡中。

請注意第三點!或者我們可以在這里找到答案!

假設(shè)我們在https://medium.com/page/1中寫了這樣一段代碼:

btn.addEventListener('click', () => {
  window.sessionStorage.setItem('name', 'fatfish')
  window.open('https://medium.com/page/2')
})

我可以在 https://medium.com/page/2 獲取名稱值嗎?

console.log(window.sessionStorage.getItem('name')) // null or fatfish?

是的,答案就是fatfish。那么,我們確定 sessionStorage 可以在多個選項卡之間共享數(shù)據(jù)嗎?

最終答案

讓我們嘗試再次繼續(xù)執(zhí)行 https://medium.com/page/1 上的一段代碼。

window.sessionStorage.setItem('name', 'medium')
window.sessionStorage.setItem('age', '1000')

如果sessionStorage可以在不同窗口或選項卡之間共享數(shù)據(jù),那么https://medium.com/page/2也可以獲取name和age的最新值

console.log(window.sessionStorage.getItem('name')) // 111
console.log(window.sessionStorage.getItem('age')) // null

所以,我們可以得出結(jié)論,sessionStorage不能在多個窗口或選項卡之間共享數(shù)據(jù),但是,當(dāng)通過window.open或鏈接打開新頁面時,新頁面會復(fù)制上一個頁面的sessionStorage。

總結(jié)

以上就是我今天想與你分享的知識內(nèi)容,希望對你有所幫助,最終,感謝你的閱讀。


責(zé)任編輯:華軒 來源: web前端開發(fā)
相關(guān)推薦

2025-01-07 12:58:28

2024-07-22 14:09:22

@AsyncJava

2024-09-18 09:02:14

單核服務(wù)器線程切換

2023-08-13 16:17:31

2020-03-10 08:01:05

Java堆內(nèi)存線程共享

2020-03-06 15:36:01

Redis內(nèi)存宕機

2022-07-26 08:40:42

Java并發(fā)工具類

2022-08-02 06:31:32

Java并發(fā)工具類

2022-07-12 12:05:22

JavaSemaphore

2022-02-08 08:14:07

Context數(shù)據(jù)線程

2021-07-06 07:08:18

管控數(shù)據(jù)數(shù)倉

2020-09-26 22:04:32

數(shù)據(jù)安全傳輸HTTPSHTTP 協(xié)議

2023-07-11 08:40:02

IO模型后臺

2022-06-30 08:14:05

Java阻塞隊列

2022-05-23 08:43:02

BigIntJavaScript內(nèi)置對象

2018-10-22 14:28:26

面試官數(shù)據(jù)公司

2019-06-21 15:20:05

Redis數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)庫

2022-07-11 10:47:46

容器JAVA

2024-09-14 10:50:29

通信代碼函數(shù)

2021-07-05 11:06:11

組件React通信
點贊
收藏

51CTO技術(shù)棧公眾號