【web】js基础巩固——json&数据存储(六)

JSON

1 语法
json可以表示以下三种类型的值:

  • 简单值:使用与js相同的语法,可以在json中表示字符串,数值,布尔值和null,但是不能表示undefined
  • 对象:对象作为一种复杂的数据类型,表示一组无序的键值对儿,而每个键值对中的值可以是简单值,也可以是复杂数据类型的值。
  • 数组:数组也是一种复杂的数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值,数组的值也可以是任意类型——简单值,对象或者数组。

简单值:
json字符串必须使用双引号,布尔值和null也是有效的json形式
对象:
(1)json中的对象要求给属性加引号。
(2)与js对象相比,有两个地方不同:首先,没有声明变量。其次,没有末尾的分号。
数组:
在json中可以使用同样的语法来表示数组。同样要注意,json数组也没有变量和分号。
把对象和数组结合起来,可以构成更复杂的数据集合。

解析与序列化

可以把json数据结构解析为有用的js对象。
json对象:
json对象有两个方法:stringify()和parse(),在最简单的情况下,这两个方法分别用于把js对象序列化为js字符串和把json字符串解析为原生js值。
在序列化json对象时,所有函数及原型成员都会被有意忽略,不体现在结果中,此外,值为undefined的任何值也会被跳过。
经过stringify()和parse()后的对象是独立的,与原对象之间没有任何关系。

序列化选项

JSON.stringify()还可接受另外两个参数,第一个是过滤器,可以是一个数组,也可以是一个函数;第二个参数是一个选项,表示是否在json中保持缩进。

toJSON():
可以给对象定义toJSON()方法,返回自身的json数据格式。

序列化顺序:

  • 如果存在toJSON()方法,且能够通过它获得有效值,则调用该方法,否则,返回对象本身。
  • 如果提供第二个参数,应用这个函数过滤器,传入过滤器的值是第一步返回的值
  • 对第二步返回的每个值进行相应的序列化
  • 如果提供了第三个参数,执行相应的格式化

解析选项

parse()方法可以接受另一个参数,该参数是一个函数,将在每个键值对上调用。该函数接受两个值,一个键和一个值。函数若返回undefined,则表示要删除相应的键,如果返回其他值,则将该值插入到结果中。


数据存储

最初在客户端用于存储会话信息。该标准要求服务器对任意http请求发送Set-Cookie http头作为响应的一部分,其中包含会话信息,例如服务器的相应头如下:

Set-Cookie:name=value

浏览器会存储这样的会话信息,并在这之后,通过为每个请求添加http头将信息发送回服务器。

Cookie:name=value

(1)限制:cookie在性质上是绑定在特定的域名下的,当设置了一个cookie后,再给创建它的域名发送请求时,那会包含这个cookie.这个限制确保了存储的cookie只能让批准的接受者访问,而无法被其他域访问。
最好将整个cookie长度限制在4095B以内
cookie个数上限不同浏览器不同,最好控制在50个以内。‘
(2)cookie构成

  • 名称:一个唯一确定的cookie名称。cookie名称不区分大小写。cookie名称必须经过url编码的
  • 值:存储在cookie中的字符串值,必须被URL编码
  • 域:cookie对于哪个域是有效的。所有向该域发送的请求都会包含这个cookie信息。
  • 路径:指定特定的路径应该向服务器发送cookie
  • 失效时间:表示cookie应该被删除的时间戳
  • 安全标志:指定后,cookie只有在使用ssl连接才能发送到服务器。
    以上每一段信息都作为set-cookie的一部分,使用分号加空格分隔每一段。
Set-Cookie:name=value; domain=.wrox.com; path=/ ;secure

(3)js中的cookie
使用document.cookie属性,这个属性的独特之处在于他会因为使用它的方式不同而出现不同的行为。当用来获取属性值时,返回一系列由分号隔开的名值对儿,所有的名字和值都是经过url编码的,所以必须使用decodeURIComponent()编码。

2 WEB存储机制

  • Storage类型:提供最大的存储空间来存储名值对,有如下方法:
    • clear()
    • getItem(name)
    • key(index)
    • removeItem(name)
    • setItem(name, value)
  • sesstionStorage对象:Storage类型的实例。存储特定于某个会话的数据,也就是该数据只保持到浏览器关闭。存储在sessionStorage中的数据可以跨越页面刷新而存在。因为该对象绑定于某个服务器会话,所以本地运行是不可用的。存储在sessionStorage中的数据只能由最初给对象存储数据的页面访问到,所以多页面应用有限制。
    sessionstorage对象应该主要用于仅针对会话的小段数据存储。如果需要跨越会话存储数据,哪个以下两个对象更合适。
  • globalStorage对象
    这个对象的目的是跨越会话存储数据,但有特定的访问限制。
globalStorage["www.wrox.com"].name="jack"
var name=globalStorage["www.wrox.com"].name

globalStorage[“www.wrox.com”]才是Storage对象
储存在globalStorage上的数据会一直保留在磁盘上,这让其非常适合在客户端存储文档或者长期保存用户的偏好设置。

  • localStorage对象
    不能给localStorage指定任何访问规则,规则事先就定好了,要访问它,必须来自同一个域名(子域名无效)。使用同一个协议在同一个端口上。
  • storage事件
  • 限制:对于localStorage,浏览器设置每个来源5M的限制。对于sessionStorage限制是5M
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值