zoukankan      html  css  js  c++  java
  • JSON.stringify 方法模拟

    先严格判断类型:

    function getType(vari) {
      return Object.prototype.toString.call(vari).slice(8, -1)
    }

    然后处理各种类型的数据:

    function toStringify(obj) {
      let str = ''
      switch (getType(obj)) {
        case 'Object': // 对象类型需要遍历递归
          str += '{'
          Object.keys(obj).forEach(k => {
            let res = toStringify(obj[k])
            if (res) {
              str += `"${k}":${res},`
            }
          })
          return str.slice(0, -1) + '}'
        case 'Array': // 数组类型需要遍历递归
          str = '['
          obj.forEach(k => {
            let res = toStringify(k)
            if (res) {
              str += res + ','
            }
          })
          return str.slice(0, -1) + ']'
        case 'Date': // 日期类型需要toJSON转日期字符串
          return `"${obj.toJSON()}"`
        case 'String': // 字符串需要加引号
          return `"${obj}"`
        case 'Number': // 数字类型直接返回
          return `${obj}`
        case 'Boolean': // 布尔类型true和false转字符串
          if (obj === true) {
            return `true`
          }
          return `false`
        case 'RegExp': // 以下类型直接转空对象字符串
        case 'Set':
        case 'Map':
        case 'WeakMap':
        case 'WeakSet':
        case 'ArrayBuffer':
        case 'Blob':
        case 'Int32Array':
        case 'Int8Array':
        case 'Int16Array':
          return `{}`
        case 'Null': // null转字符串
          return `null`
        case 'BigInt': // bigint类型报错
          throw Error('Do not know how to serialize a BigInt')
          return
        case 'Function': // 以下三个及其它类型返回空忽略
        case 'Undefined':
        case 'Symbol':
        default:
          return
      }
    }

    其实很简单,只需要判断类型,该转什么就转什么,然后拼接,上面只罗列了21种类型,如果还有其它的加上就行

    每一次的记录,都是向前迈进的一步
  • 相关阅读:
    讲课专用——线段树——最长上升子序列
    讲课专用——线段树——最长连续空位
    讲课专用——线段树——BSS
    求背景图
    致备战noip2018的勇士
    TNS-12547 Linux Error: 104: Connection reset by pe (转载)
    清理Oracle安装目录里的一些日志信息
    tmp_table_size
    11gr2 alert日志中报TNS-12535 TNS-00505原因及解决方法 (转载)
    systemstate dump 介绍
  • 原文地址:https://www.cnblogs.com/kdcg/p/14583657.html
Copyright © 2011-2022 走看看