一、JSON
JSON:JavaScript Object Notation
JSON是一个字符串 常常用于网络传输数据的一种字符串格式(js中的所有数据用引号引起来就是JSON)
querystring 查询字符串 "name=karen&pwd=abc123&count=20"
template 模板字符串 `<div style="">666</div>`
JSON json字符串 '{"name":"karen","its":["hello","h5"]}'
var re='{name:"karen","its":["hello","h5",{"xx":20}]}' var re='[10,203,4]' var re=1000 var re='"hello"' console.log(typeof re) var obj=JSON.parse(re) //可以把字符串转换为对象 console.log(re,obj) //以上都是JSON
JSON解析
var obj=JSON.parse(re) //可以把字符串转换为对象
console.log(re,obj)
var obj={name:"karen"}
var str=JSON.stringify(obj) //返回值是字符串
console.log(str) //{"name":"karen"}
var obj={age:20} //存数据
obj["age"] //取数据加引号
二、对象的深拷贝
对象属性们 Object.keys(obj1)返回数组装的obj1的所有成员名
var obj={name:"jack"},a="name";obj[a]可以取到"jack"
Object.prototype.copy1=function () {
//设计代码 让它有如下功能
}
var obj={name:"karen",infos:[{img:"xx",count:20}]}
var obj2=obj.copy1()
obj2.infos[0].count=30
console.log(obj.infos[0].count)//30
var obj3=obj.copy1(true)
obj3.infos[0].count=40
console.log(obj.infos[0].count)//30
console.log(obj3.infos[0].count)//40
//方法1. 最简单的方式,缺陷是原型链没有拷贝 函数和null不会拷贝
var copy1 = function (obj) {
return JSON.parse(JSON.stringify(obj));
}
var a = {a:function(){console.log('hello world')},b:{c:1},c:[1,2,3],d:"wanger",e:new Date(),f:null,g:undefined}
var b = copy1(a)
//方法2.利用自调用
var copy1 = function (obj) {
if(obj === null) return null
if(typeof obj !== 'object') return obj;
if(obj.constructor===Date) return new Date(obj);
if(obj.constructor === RegExp) return new RegExp(obj);
var newObj = new obj.constructor (); //保持继承链
for (var key in obj) {
if (obj.hasOwnProperty(key)) { //不遍历其原型链上的属性
var val = obj[key];
newObj[key] = typeof val === 'object' ? arguments.callee(val) : val; // 使用arguments.callee解除与函数名的耦合
}
}
return newObj;
};
//对象深拷贝1(如果内部没有引用数据或者时间正则null等等数据时)
var obj={name:"karen"}
// var obj2={}
// obj2.name=obj.name
var str=JSON.stringify(obj)//'{"name":"karen"}'
var obj2=JSON.parse(str)//{name:"karen"}
console.log(obj2,obj==obj2)//{name:"karen"} false
// 对象深拷贝2(笔试题中经常出现-跟垂直水平居中)
var obj={x1:null,x2:new Date(),x3:"hello",son:{age:20}}
var obj2=JSON.parse(JSON.stringify(obj))
obj2.son.age=300
console.log(obj2,obj)
var dt=new Date()
var dt2=JSON.parse(JSON.stringify(dt))
console.log(typeof dt2)
var obj={name:"karen",its:[10,20,30]}//[10,20,30,[90,100]]//null//"hello"//{x1:null,x2:new Date(),x3:"hello",son:{age:20}}
var obj2=new Person()
function deepcopy(data){
//number
if(typeof(data)=="object"){
if(data.constructor==Date){
return new Date(data.getTime())
}
else if(data==null){
return null
}
else if(data.constructor==RegExp){
return new RegExp(data)
}
else if(data.constructor==Array){
var newArray=new Array()
for(var i=0;i<data.length;i++){
var temp=data[i]
newArray.push(arguments.callee(temp))
}
return newArray
}
else{
var newobj=new data.constructor() //new Object()
// Object.keys()
for (var key in data) {
newobj[key]=arguments.callee(data[key])
}
return newobj
}
}
else{
return data
}
}
var obj2=deepcopy(obj)
// console.log(obj2,obj==obj2,obj[3]==obj2[3])
console.log(obj2,obj==obj2,obj.its==obj2.its)