本地儲存localStorage的用法總結
一、什麼是localStorage?
在HTML5中,新加入了一個localStorage特性,這個特性主要是用來作為本地儲存來使用的,解決了cookie儲存空間不足的問題(cookie中每條cookie的儲存空間為4k),localStorage中一般瀏覽器支援的是5M大小,這個在不同的瀏覽器中localStorage會有所不同。
二、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.clear() // undefined
localStorage //Storage {length: 0} 儲存資料
儲存資料
localStorage.setItem("name","caibin") //儲存名字為name值為caibin的變數
localStorage.name = "caibin"; // 等價於上面的命令
localStorage // Storage{name: "caibin", length: 1} 讀取資料
讀取資料
localStorage.getItem("name") //caibin,讀取儲存在localStorage物件里名為name的變數的值
localStorage.name // "caibin"
localStorage.valueOf() //讀取儲存在localStorage上的所有資料
localStorage.key(0) // 讀取第一條資料的變數名(鍵值)
//遍歷並輸出localStorage裡儲存的名字和值
for(var i=0; i<localStorage.length;i++){
console.log('localStorage裡儲存的第'+i+'條資料的名字為:'+localStorage.key(i)+',值為:'+localStorage.getItem(localStorage.key(i)));
}
刪除某個變數
localStorage.removeItem("name"); //undefined
localStorage // Storage {length: 0} 可以看到之前儲存的name變數已經從localStorage裡刪除了
檢查localStorage裡是否儲存某個變數
// 這些資料都是測試的,是在我當下環境裡的,只是demo哦~
localStorage.hasOwnProperty('name') // true
localStorage.hasOwnProperty('sex') // false
將陣列轉為本地字串
var arr = ['aa','bb','cc']; // ["aa","bb","cc"]
localStorage.arr = arr //["aa","bb","cc"]
localStorage.arr.toLocaleString(); // "aa,bb,cc"
將JSON儲存到localStorage裡
var students = {
xiaomin: {
name: "xiaoming",
grade: 1
},
teemo: {
name: "teemo",
grade: 3
}
}
students = JSON.stringify(students); //將JSON轉為字串存到變數裡
console.log(students);
localStorage.setItem("students",students);//將變數存到localStorage裡
var newStudents = localStorage.getItem("students");
newStudents = JSON.parse(students); //轉為JSON
console.log(newStudents); // 打印出原先物件