zoukankan      html  css  js  c++  java
  • JSON.stringify() & JSON.parse() 实现

    • Boolean | Number | String 类型会自动转换成对应的原始值.
    • undefined、任意函数以及symbol,会被忽略(出现在非数组对象的属性值中时),或者被转换成 null(出现在数组中时).
    • 不可枚举的属性会被忽略
    • 如果一个对象的属性值通过某种间接的方式指回该对象本身,即循环引用,属性也会被忽略.
    //忽略了循环的本质,差点没理解明白这里,也就是递归的意义
    function jsonStringify(obj){
      function test(type){
        var reg = /string|undefined|function/
        return reg.test(type)
      }
      if(typeof obj == 'object'){
        let json = []
        let isArr = Array.isArray(obj)
        for(let key in obj){
          let value = obj[key]
          let type = typeof value
          if(test(type)){
            value = '"' + value + '"'
          }else if(type ==='object'){
            value = jsonStringify(value)
          }
          json.push((isArr ? "" : '"' + key + '":') + String(value));
          console.log('json',json)
        }
        return (isArr ? "[" : "{") + String(json) + (isArr ? "]" : "}")
      }
    }
    

    JSON.parse 实现

    • 使用eval()
    • var json = (new Function("return" + jsonStr))()
    • 实现原理:Function 构造函数的最后一个参数作为函数的方法体
  • 相关阅读:
    Linux之定时器与时间管理 【转】
    LDAP研究
    Mac中使用svn进行项目管理
    英国调查报告称中国梦吸引力首超美国梦
    怎样删除在Github中创建的项目
    MySQL分组数据
    Eclipse ADT 插件安装慢的解决的方法
    iOS插件化研究之中的一个——JavaScriptCore
    二维码的妙用:通过Zxing实现wifi账号password分享功能
    CF(435D
  • 原文地址:https://www.cnblogs.com/zhenjianyu/p/12964838.html
Copyright © 2011-2022 走看看