BOM 存储对象【1】web存储API localStorage sessionStorage JSON的存储和转化
BOM window 对象
window 对象是全局对象,所有在全局作用域中声明的变量、对象、函数都会变成 window 对象的属性、对象、方法,处于所有对象的顶级。window对象,不需要通过 new 关键字创建实例,只需要通过“对象名.成员”的格式访问其属性和方法。
HTML DOM 的 document 也是 window 对象的属性之一:window.document.getElementById("header");
等同于:document.getElementById("header");
由此,我们可以明确规律:
- 全局变量 是 window 对象的属性。
- 全局函数 是 window 对象的方法。
基于 window 对象是全局对象的概念,它下属的所有全局变量和函数都是它的属性,并且所有原生的构造函数及其它函数都存在与它的命名空间下,因此,在调用 window 对象的方法和属性时,可以省略 window 对象的引用。但在局部作用域中定义不会归入 window 对象名下,只有在全局作用域中定义才会被自动归入到 window 对象名下。
<script>
var NameNew="Hevate"; //定义变量
var ArrNew=new Array("one","two","three"); //定义对象
function MyName(){ // 定义函数,不会直接执行,需要经过调用
var NameNew = "liu"
console.log("因为 MyName() 函数存在于全局作用域中,所以 this 被映射到 window,this.MyName 即是 window.MyName")
console.log("MyName() 不加上 window 或 this:"+NameNew)
console.log("MyName() 加上 this:"+this.NameNew)
console.log("MyName() 加上 window:"+window.NameNew)
}
/* 输出变量*/
window.console.info("对于变量,加上 window 输出:"+NameNew) //输出 Hevate
console.info("对于变量,不加 window 同样输出:"+NameNew)
/* 输出对象*/
window.console.log("对于对象,加上 window 输出:"+ArrNew) //输出 one,two,three
console.log("对于对象,加上 window 输出结果相同:"+ArrNew)
/* 输出函数*/
window.MyName() //调用 函数 MyName()
MyName() //调用 函数 MyName()
</script>
因为 MyName() 函数存在于全局作用域中,所以 this 被映射到 window,this.MyName
即是 window.MyName
Javascript 存储对象 Web 存储 API
Web 存储 API 提供了 sessionStorage (会话存储) 和 localStorage(本地存储)两个存储对象来对网页的数据进行添加、删除、修改、查询操作。
localStorage 在浏览器中存储 key/value 对,拓展了cookie的4K限制,用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去除。
sessionStorage 在浏览器中存储 key/value 对,用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据。
基本语法 window.localStorage
window.sessionStorage
保存数据 localStorage.setItem("key","value");
读取数据 var theName = localStorage.getItem("key");
删除数据 localStorage.removeItem("key");
属性 | 描述 |
---|---|
length | 返回存储对象中包含多少条数据。 |
方法 | 描述 |
---|---|
key(n) | 返回存储对象中第 n 个键的名称 |
getItem(keyname) | 返回指定键的值 |
setItem(keyname, value) | 添加键和值,如果对应的值存在,则更新该键对应的值。 |
removeItem(keyname) | 移除键 |
clear() | 清除存储对象中所有的键 |
判断浏览器是否支持 localStorage 对象
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div class="nav"></div>
</body>
<script type="text/javascript">
function checkLocalStorage(){
if(!window.localStorage){
console.log("浏览器不支持 localStorage 对象");
/* 在js中return 语句只能放在function中,会报错*/
return false;
}else{
console.log("浏览器支持 localStorage 对象")
}
}
checkLocalStorage()
</script>
</html>
localStorage 对象的三种写入和读取方法
三种写入方法
MyStorage[“a”] = 1; // 写入 a 字段,value值为 1
MyStorage.b = 2; // 写入 b 字段,value值为 2
MyStorage.setItem(“c”,3) //写入 c 字段,value值为 3
三种读取方法
console.log(“a:”+typeof MyStorage.a) // 输出为 string
console.log(“b:”+typeof MyStorage.getItem(“b”)) //输出 string
console.log(“c:”+typeof MyStorage[“c”]) //输出 string
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div class="nav"></div>
</body>
<script type="text/javascript">
function checkLocalStorage(){
if(!window.localStorage){
console.log("浏览器不支持 localStorage 对象");
/* 在js中return 语句只能放在function中,会报错*/
return false;
}else{
console.log("浏览器支持 localStorage 对象")
var MyStorage = window.localStorage; // 创建 localStorage 对象,并赋值给变量 MyStorage
/* 三种 localStorage 对象中写入的 key-value 对的方式*/
MyStorage["a"] = 1; // 写入 a 字段,value值为 1
MyStorage.b = 2; // 写入 b 字段,value值为 2
MyStorage.setItem("c",3) //写入 c 字段,value值为 3
/* localStorage 对象,无论写入的是什么值,都会转换成为字符串形式进行存储*/
console.log("a:"+typeof MyStorage.a) // 输出为 string
console.log("b:"+typeof MyStorage.getItem("b")) //输出 string
console.log("c:"+typeof MyStorage["c"]) //输出 string
}
}
checkLocalStorage()
</script>
</html>
localStorage 对象更改对应key的value值
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div class="nav"></div>
</body>
<script type="text/javascript">
function checkLocalStorage(){
if(!window.localStorage){
console.log("浏览器不支持 localStorage 对象");
/* 在js中return 语句只能放在function中,会报错*/
return false;
}else{
console.log("浏览器支持 localStorage 对象")
var MyStorage = window.localStorage; // 创建 localStorage 对象,并赋值给变量 MyStorage
/* 三种 localStorage 对象中写入的 key-value 对的方式*/
MyStorage["a"] = 1; // 写入 a 字段,value值为 1
MyStorage.b = 2; // 写入 b 字段,value值为 2
MyStorage.setItem("c",3) //写入 c 字段,value值为 3
/* localStorage 对象,无论写入的是什么值,都会转换成为字符串形式进行存储*/
console.log("a:"+typeof MyStorage.a) // 输出为 string
console.log("b:"+typeof MyStorage.getItem("b")) //输出 string
console.log("c:"+typeof MyStorage["c"]) //输出 string
/* 更改 localStorage 对象中对应key的value值*/
MyStorage.c = "3_c";
console.log("更改之后的 c 字段:"+MyStorage.c) //输出字符串 3_c
}
}
checkLocalStorage()
</script>
</html>
localStorage 对象删除其中指定的 key/value 对
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div class="nav"></div>
</body>
<script type="text/javascript">
function checkLocalStorage(){
if(!window.localStorage){
console.log("浏览器不支持 localStorage 对象");
/* 在js中return 语句只能放在function中,会报错*/
return false;
}else{
console.log("浏览器支持 localStorage 对象")
var MyStorage = window.localStorage; // 创建 localStorage 对象,并赋值给变量 MyStorage
/* 三种 localStorage 对象中写入的 key-value 对的方式*/
MyStorage["a"] = 1; // 写入 a 字段,value值为 1
MyStorage.b = 2; // 写入 b 字段,value值为 2
MyStorage.setItem("c",3) //写入 c 字段,value值为 3
/* localStorage 对象,无论写入的是什么值,都会转换成为字符串形式进行存储*/
console.log("a:"+typeof MyStorage.a) // 输出为 string
console.log("b:"+typeof MyStorage.getItem("b")) //输出 string
console.log("c:"+typeof MyStorage["c"]) //输出 string
/* 更改 localStorage 对象中对应key的value值*/
MyStorage.c = "3_c";
console.log("更改之后的 c 字段:"+MyStorage.c) //输出字符串 3_c
/* 删除 localStorage 对象中某个指定的key-value值*/
MyStorage.removeItem("a") //删除 localStorage 对象中的 a 字段
console.log("当字段 a 删除后,再打印 a 时,输出:"+MyStorage.getItem("a")) // null
}
}
checkLocalStorage()
</script>
</html>
遍历获取 localStorage 对象中的 key/value 对
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div class="nav"></div>
</body>
<script type="text/javascript">
function checkLocalStorage(){
if(!window.localStorage){
console.log("浏览器不支持 localStorage 对象");
/* 在js中return 语句只能放在function中,会报错*/
return false;
}else{
console.log("浏览器支持 localStorage 对象")
var MyStorage = window.localStorage; // 创建 localStorage 对象,并赋值给变量 MyStorage
/* 三种 localStorage 对象中写入的 key-value 对的方式*/
MyStorage["a"] = 1; // 写入 a 字段,value值为 1
MyStorage.b = 2; // 写入 b 字段,value值为 2
MyStorage.setItem("c",3) //写入 c 字段,value值为 3
/* localStorage 对象,无论写入的是什么值,都会转换成为字符串形式进行存储*/
console.log("a:"+typeof MyStorage.a) // 输出为 string
console.log("b:"+typeof MyStorage.getItem("b")) //输出 string
console.log("c:"+typeof MyStorage["c"]) //输出 string
/* 更改 localStorage 对象中对应key的value值*/
MyStorage.c = "3_c";
console.log("更改之后的 c 字段:"+MyStorage.c) //输出字符串 3_c
/* 删除 localStorage 对象中某个指定的key-value值*/
MyStorage.removeItem("a") //删除 localStorage 对象中的 a 字段
console.log("当字段 a 删除后,再打印 a 时,输出:"+MyStorage.getItem("a")) // null
/* 获取 localStorage 对象中的所有 key/value 对*/
console.log(MyStorage)
for(var i=0;i<MyStorage.length;i++){
var KeyValue = MyStorage.key(i);
console.log(KeyValue);
}
}
}
checkLocalStorage()
</script>
</html>
删除 localStorage 对象中所有的键值对
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div class="nav"></div>
</body>
<script type="text/javascript">
function checkLocalStorage(){
if(!window.localStorage){
console.log("浏览器不支持 localStorage 对象");
/* 在js中return 语句只能放在function中,会报错*/
return false;
}else{
console.log("浏览器支持 localStorage 对象")
var MyStorage = window.localStorage; // 创建 localStorage 对象,并赋值给变量 MyStorage
/* 三种 localStorage 对象中写入的 key-value 对的方式*/
MyStorage["a"] = 1; // 写入 a 字段,value值为 1
MyStorage.b = 2; // 写入 b 字段,value值为 2
MyStorage.setItem("c",3) //写入 c 字段,value值为 3
/* localStorage 对象,无论写入的是什么值,都会转换成为字符串形式进行存储*/
console.log("a:"+typeof MyStorage.a) // 输出为 string
console.log("b:"+typeof MyStorage.getItem("b")) //输出 string
console.log("c:"+typeof MyStorage["c"]) //输出 string
/* 更改 localStorage 对象中对应key的value值*/
MyStorage.c = "3_c";
console.log("更改之后的 c 字段:"+MyStorage.c) //输出字符串 3_c
/* 删除 localStorage 对象中某个指定的key-value值*/
MyStorage.removeItem("a") //删除 localStorage 对象中的 a 字段
console.log("当字段 a 删除后,再打印 a 时,输出:"+MyStorage.getItem("a")) // null
/* 获取 localStorage 对象中的所有 key/value 对*/
console.log(MyStorage)
for(var i=0;i<MyStorage.length;i++){
var KeyValue = MyStorage.key(i);
console.log(KeyValue);
}
/* 清除 localStorage 对象中的所有键值对*/
MyStorage.clear();
console.log(MyStorage);
console.log(MyStorage.length); // 存储对象中包含数据条数为 0
}
}
checkLocalStorage()
</script>
</html>
JSON 存入 localStorage 时的注意事项
由于 localStorage 会自动将localStorage转换成为字符串形式,因此在将 JSON 存入 localStorage 中时,需要使用 JSON.stringify() 方法,将 JSON 提前转换成为 JSON 字符串,否则存储的是对象的字符串而不是JSON内容
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body></body>
<script type="text/javascript">
function checkLocalStorage(){
if(!window.localStorage){
console.log("浏览器不支持 localStorage 对象");
/* 在js中return 语句只能放在function中,会报错*/
return false;
}else{
var MyStorage=window.localStorage;
var data={
name:'xiecanyong',
sex:'man',
hobby:'program'
};
/* 如果上述的data 不转化为字符串,直接存储到 localStorage 对象里,结果就是 [object object]*/
var d=JSON.stringify(data);
MyStorage.setItem("MyData",d);
console.log("JSON转化为字符串之后的存储内容:"+MyStorage.MyData); // 转化为字符串之后,结果就是data里面具体的内容
}
}
checkLocalStorage()
</script>
</html>
使用 JSON.parse() 方法,将 JSON 字符串转化成 JSON 对象
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body></body>
<script type="text/javascript">
function checkLocalStorage(){
if(!window.localStorage){
console.log("浏览器不支持 localStorage 对象");
/* 在js中return 语句只能放在function中,会报错*/
return false;
}else{
var MyStorage=window.localStorage;
var data={
name:'xiecanyong',
sex:'man',
hobby:'program'
};
/* 如果上述的data 不转化为字符串,直接存储到 localStorage 对象里,结果就是 [object object]*/
var d=JSON.stringify(data);
MyStorage.setItem("MyData",d);
console.log("JSON转化为字符串之后的存储内容:"+MyStorage.MyData); // 转化为字符串之后,结果就是data里面具体的内容
/* 将 localStorage 中的JSON字符串转化为 JSON 对象输出*/
var e = MyStorage.getItem("MyData");
var JSONObj = JSON.parse(e);
console.log(typeof JSONObj); // 输出 object
console.log(JSONObj); // 输出 JSON 对象格式
}
}
checkLocalStorage()
</script>
</html>
Reference