每天学么点儿技术花活儿(九月篇:JSON解析报错,判断对象相同等)

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值