JSON和数据存储的学习
JSON表示方式
[
"hahaha",
{
"name": "Fhup",
"age": 18,
"height": 1.88,
"hobbies": {
"lilei": "nasketball"
}
},
[
{
"name": "xxx",
"age": 18
},
{
"name": "yyy",
"age": "21"
}
]
]
JSON的序列化需求
const obj = {
name: 'Fhup',
age: 18,
height: 1.88
}
const jsonStr = JSON.stringify(obj)
console.log(JSON.parse(jsonStr))
localStorage.setItem('obj', JSON.stringify(obj))
console.log(JSON.parse(localStorage.getItem('obj')))
序列化stringify细节
const obj = {
name: 'Fhup',
age: 18,
height: 1.88,
}
const jsonStr1 = JSON.stringify(obj)
console.log(jsonStr1);
const jsonStr2 = JSON.stringify(obj, ['name', 'age'])
console.log(jsonStr2);
const jsonStr3 = JSON.stringify(obj, (key, value)=>{
if(key === 'age') {
value+=1
}
return value
})
console.log(jsonStr3);
const jsonStr4 = JSON.stringify(obj, null, "---")
console.log(jsonStr4);
解析parse细节
const jsonStr = '{"name":"Fhup","age":18,"height":1.88}'
const info1 = JSON.parse(jsonStr)
console.log(info1);
const info2 = JSON.parse(jsonStr, (key, value) => {
if(key === 'age') {
value-=10
}
return value
})
console.log(info2);
利用JSON序列化深拷贝
const info={name:'Fhup',age:18,friend:{name:'james'}}
const newInfo = Object.assign({}, info)
console.log(newInfo)
info.friend.name = 'xxxxxx'
console.log(newInfo)
Storage工具类的封装
class Cache {
constructor(isLocal = true) {
this.storage = isLocal ? localStorage : sessionStorage
}
setCache(key, value) {
if(value){
this.storage.setItem(key, JSON.stringify(value))
}
}
getCache(key) {
const value = this.storage.getItem(key)
if(value){
return JSON.parse(value)
}
}
removeCache(key) {
this.storage.removeItem(key)
}
clearCache() {
this.storage.clear()
}
key(index) {
return this.storage.key(index)
}
length() {
return this.storage.length
}
}
const localCache = new Cache()
const sessionCache = new Cache(false)
export{
localCache,
sessionCache
}
indexedDB数据库
const request = indexedDB.open('Fhup')
request.onerror = function(err) {
console.log('打开失败!');
}
let db = null
request.onsuccess = function(event) {
db = event.target.result
}
request.onupgradeneeded = function(event) {
const db = event.target.result
db.createObjectStore('users', { keyPath: 'id' })
}
class User {
constructor(id, name, age) {
this.id = id
this.name = name
this.age = age
}
}
const users = [
new User(101, 'Fhup', 18),
new User(102, 'kobe', 40),
new User(103, 'lilei', 20)
]
const btns = document.querySelectorAll('button')
const text = document.querySelector('p')
for(let i = 0; i < btns.length; i++) {
btns[i].addEventListener('click', ()=>{
const transaction = db.transaction(['users'], 'readwrite')
const store = transaction.objectStore('users')
switch (i) {
case 0:
for(const user of users) {
const insertRequest = store.add(user)
insertRequest.onsuccess = function() {
console.log(`${user.name}插入成功`);
}
insertRequest.onerror = function(event) {
console.log('已经插入,请勿再次插入')
}
}
transaction.oncomplete = function() {
text.innerHTML = '添加操作全部完成'
}
break;
case 1:
const queryRequest = store.openCursor()
queryRequest.onsuccess = function(event) {
const cursor = event.target.result
if(cursor.key === 103){
console.log(cursor.key, cursor.value);
text.innerHTML = '查询103成功!'
}else{
console.log('--------');
cursor.continue()
}
}
break;
case 2:
const deleteRequest = store.openCursor()
deleteRequest.onsuccess = function(event) {
const cursor = event.target.result
if(cursor.key === 102){
cursor.delete()
text.innerHTML = '删除102记录成功'
}else{
cursor.continue()
}
}
break;
case 3:
const updateRequest = store.openCursor()
updateRequest.onsuccess = function(event) {
const cursor = event.target.result
if(cursor.key === 103){
const value = cursor.value
value.name = 'xxxxxx'
cursor.update(value)
text.innerHTML = '修改103的名字为xxxxxx,成功'
}else{
cursor.continue()
}
}
break;
default:
text.innerHTML = '错误'
break;
}
})
}