1. 程式人生 > >window.localStorage的用法

window.localStorage的用法

一、什麼是localStorage、sessionStorage

在HTML5中,新加入了一個localStorage特性,這個特性主要是用來作為本地儲存來使用的,解決了cookie儲存空間不足的問題(cookie中每條cookie的儲存空間為4k),localStorage中一般瀏覽器支援的是5M大小,這個在不同的瀏覽器中localStorage會有所不同。

在HTML5中,本地儲存是一個window的屬性,包括localStorage和sessionStorage,從名字應該可以很清楚的辨認二者的區別,前者是一直存在本地的,後者只是伴隨著session,視窗一旦關閉就沒了。以下是localStorage 和sessionStorage的區別

(1)localStorage和sessionStorage一樣都是用來儲存客戶端臨時資訊的物件。

(2)他們均只能儲存字串型別的物件(雖然規範中可以儲存其他原生型別的物件,但是目前為止沒有瀏覽器對其進行實現)。

(3)localStorage生命週期是永久,這意味著除非使用者顯示在瀏覽器提供的UI上清除localStorage資訊,否則這些資訊將永遠存在。

(4)sessionStorage生命週期為當前視窗或標籤頁,一旦視窗或標籤頁被永久關閉了,那麼所有通過sessionStorage儲存的資料也就被清空了。

(5)不同瀏覽器無法共享localStorage或sessionStorage中的資訊。相同瀏覽器的不同頁面間可以共享相同的localStorage(頁面屬於相同域名和埠),但是不同頁面或標籤頁間無法共享sessionStorage的資訊。這裡需要注意的是,頁面及標籤頁僅指頂級視窗,如果一個標籤頁包含多個iframe標籤且他們屬於同源頁面,那麼他們之間是可以共享sessionStorage的。

二、localStorage的優勢與侷限

localStorage的優勢

1、localStorage拓展了cookie的4K限制

2、localStorage會可以將第一次請求的資料直接儲存到本地,這個相當於一個5M大小的針對於前端頁面的資料庫,相比於cookie可以節約頻寬,但是這個卻是隻有在高版本的瀏覽器中才支援的

localStorage的侷限

1、瀏覽器的大小不統一,並且在IE8以上的IE版本才支援localStorage這個屬性

2、目前所有的瀏覽器中都會把localStorage的值型別限定為string型別,這個在對我們日常比較常見的JSON物件型別需要一些轉換

3、localStorage在瀏覽器的隱私模式下面是不可讀取的

4、localStorage本質上是對字串的讀取,如果儲存內容多的話會消耗記憶體空間,會導致頁面變卡

5、localStorage不能被爬蟲抓取到

localStorage與sessionStorage的唯一一點區別就是localStorage屬於永久性儲存,而sessionStorage屬於當會話結束的時候,sessionStorage中的鍵值對會被清空

這裡我們以localStorage來分析

三、localStorage的使用

首先在使用localStorage的時候,我們需要判斷瀏覽器是否支援localStorage這個屬性

if(!window.localStorage){
    alert("瀏覽器支援localstorage");
    return false;
}else{
    //主邏輯業務
}

localStorage的寫入,localStorage的寫入有三種方法

if(!window.localStorage){
    alert("瀏覽器支援localstorage");
    return false;
}else{
    var storage=window.localStorage;
    //寫入a欄位
    storage["a"]=1;
    //寫入b欄位
    storage.a=1;
    //寫入c欄位
    storage.setItem("c",3);
    console.log(typeof storage["a"]);
    console.log(typeof storage["b"]);
    console.log(typeof storage["c"]);
}

執行後的結果如下:

這裡寫圖片描述 這裡要特別說明一下localStorage的使用也是遵循同源策略的,所以不同的網站直接是不能共用相同的localStorage

最後在控制檯上面打印出來的結果是: 這裡寫圖片描述

不知道各位讀者有沒有注意到,剛剛儲存進去的是int型別,但是打印出來卻是string型別,這個與localStorage本身的特點有關,localStorage只支援string型別的儲存。

localStorage的讀取

if(!window.localStorage){
    alert("瀏覽器支援localstorage");
}else{
    var storage=window.localStorage;
    //寫入a欄位
    storage["a"]=1;
    //寫入b欄位
    storage.a=1;
    //寫入c欄位
    storage.setItem("c",3);
    console.log(typeof storage["a"]);
    console.log(typeof storage["b"]);
    console.log(typeof storage["c"]);
    //第一種方法讀取
    var a=storage.a;
    console.log(a);
    //第二種方法讀取
    var b=storage["b"];
    console.log(b);
    //第三種方法讀取
    var c=storage.getItem("c");
    console.log(c);
}

這裡面是三種對localStorage的讀取,其中官方推薦的是getItem\setItem這兩種方法對其進行存取,不要問我這個為什麼,因為這個我也不知道

我之前說過localStorage就是相當於一個前端的資料庫的東西,資料庫主要是增刪查改這四個步驟,這裡的讀取和寫入就相當於增、查的這兩個步驟

下面我們就來說一說localStorage的刪、改這兩個步驟

改這個步驟比較好理解,思路跟重新更改全域性變數的值一樣,這裡我們就以一個為例來簡單的說明一下

if(!window.localStorage){
    alert("瀏覽器支援localstorage");
}else{
    var storage=window.localStorage;
    //寫入a欄位
    storage["a"]=1;
    //寫入b欄位
    storage.b=1;
    //寫入c欄位
    storage.setItem("c",3);
    console.log(storage.a);
    // console.log(typeof storage["a"]);
    // console.log(typeof storage["b"]);
    // console.log(typeof storage["c"]);
    /*分割線*/
    storage.a=4;
    console.log(storage.a);
}

這個在控制檯上面我們就可以看到已經a鍵已經被更改為4了

localStorage的刪除

  1. 將localStorage的所有內容清除
var storage=window.localStorage;
storage.a=1;
storage.setItem("c",3);
console.log(storage);
storage.clear();
console.log(storage);
  1. 將localStorage中的某個鍵值對刪除
var storage=window.localStorage;
storage.a=1;
storage.setItem("c",3);
console.log(storage);
storage.removeItem("a");
console.log(storage.a);

控制檯檢視結果 這裡寫圖片描述

localStorage的鍵獲取

var storage=window.localStorage;
storage.a=1;
storage.setItem("c",3);
for(var i=0;i<storage.length;i++){
    var key=storage.key(i);
    console.log(key);
}

使用key()方法,向其中出入索引即可獲取對應的鍵

四、localStorage其他注意事項

一般我們會將JSON存入localStorage中,但是在localStorage會自動將localStorage轉換成為字串形式

這個時候我們可以使用JSON.stringify()這個方法,來將JSON轉換成為JSON字串

示例:

if(!window.localStorage){
    alert("瀏覽器支援localstorage");
}else{
    var storage=window.localStorage;
    var data={
        name:'xiecanyong',
        sex:'man',
        hobby:'program'
    };
    var d=JSON.stringify(data);
    storage.setItem("data",d);
    console.log(storage.data);
}

讀取之後要將JSON字串轉換成為JSON物件,使用JSON.parse()方法

var storage=window.localStorage;
var data={
    name:'xiecanyong',
    sex:'man',
    hobby:'program'
};
var d=JSON.stringify(data);
storage.setItem("data",d);
//將JSON字串轉換成為JSON物件輸出
var json=storage.getItem("data");
var jsonObj=JSON.parse(json);
console.log(typeof jsonObj);

這裡寫圖片描述  打印出來是Object物件

另外還有一點要注意的是,其他型別讀取出來也要進行轉換