JSON.parse(),JSON.stringify() 注意细节点
JSON.parse() 与 JSON.stringify() 可以将JSON类型与字符串类型相互转换,转换期间有些变化及注意点在此列举下:
1.JSON.parse()传入的数据,需要是以 双引号 包裹着key的对象转换后的字符串,如`{“a”:1}` , ‘{“a”:1}’
2.JSON.parse()传入的字符串中含有 NaN,undefiend ,Infinity 时,会报错
3.JSON.stringify时,会将各种空值转化为 “null”
为防止前端取得后端数据时解析失败,要与后端约定好将所有不合法值转换为 null 返回给前端
判断两个对象是否相同
我们知道 {} === {} 是 false, 此处相同的意思指的是,这两个对象有一样的属性,属性对应的值也相等
上代码:
var obj1 = {a:1,b:{x:3,y:{z:3}},c:{}};
var obj2 = {b:{x:3,y:{z:{}}},a:1,c:{}};
var obj3 = {b:{y:{z:3},x:3},c:{},a:1};
function isSameObj(o1,o2){
var keys1 = Object.getOwnPropertyNames(o1);
var keys2 = Object.getOwnPropertyNames(o2);
// 先判断两个对象属性数量是否相同
if(keys1.length !== keys2.length){
return false;
}else{
// 遍历对象1每个属性,将值与对象2对应属性的值进行对比,只要有不同则直接断言两对象不相同
for(var i=0;i<keys1.length;i++){
if(typeof o1[keys1[i]] == 'object'){
// 若属性对应的值为对象,则继续调用自身方法
if(!isSameObj(o1[keys1[i]],o2[keys1[i]])){
return false;
}
}else{
if(o1[keys1[i]] !== o2[keys1[i]]){
return false;
}
}
}
}
// 走到这里了 你得承认人家相同..
return true;
}
console.log(isSameObj(obj1,obj2)) //false
console.log(isSameObj(obj1,obj3)) //true