zoukankan      html  css  js  c++  java
  • 判断类型(通用类型检测方法)和手写深拷贝

    判断类型(通用类型检测方法)

    const isTypeOf = (data) => {
        return Object.prototype.toString.call(data).replace(/[object (w+)]/, '$1').toLowerCase()
    }
    
    console.log(isTypeOf({})) // object
    console.log(isTypeOf([])) // array
    console.log(isTypeOf("ss")) // string
    console.log(isTypeOf(1)) // number
    console.log(isTypeOf(false)) // boolean
    console.log(isTypeOf(/w+/)) // regexp
    console.log(isTypeOf(null)) // null
    console.log(isTypeOf(undefined)) // undefined
    console.log(isTypeOf(Symbol("id"))) // symbol
    console.log(isTypeOf(() => { })) // function
    

    手写深拷贝

    //简单版深拷贝(不考虑Math()和Date())
    function deepClone(obj){
      //判断是否是对象
      function isObject(o){
        return (typeof o === 'object' || typeof o === 'function') && typeof o !== null
      }
      // 如果obj不是对象,抛出错误
      if(!isObject(obj)){
        throw new Error('非对象')
      }
      //判断是否是数组
      let isArray = Array.isArray(obj)
      //浅拷贝当前obj给newObj
      let newObj = isArray? [...obj]:{...obj}
      //对newObj中的key的值挨个进行判断,如果是对象进行递归
      Reflect.ownKeys(newObj).forEach(key => {
        newObj[key] = isObject(obj[key]) ? deepClone(obj[key]) : obj[key]
      })
      //最后记得return newObj
      return newObj
    }
    
    let obj = {
      a: [1, 2, 3],
      b: {
        c: 2,
        d: 3
      }
    }
    let newObj = deepClone(obj)
    console.log(newObj)
    newObj.b.c = 1
    console.log(obj.b.c) // 2
    

      

  • 相关阅读:
    SecureCRT + Tmux 分屏 高效开发
    Python—基础之杂货铺
    Python—五大基本语句
    Python—运算符的类型
    Python—基本数据类型
    Python—变量详解
    Python—虚拟环境的创建与管理(virtualenv与virtualenvwrapper)
    Mysql—数据库管理与表管理
    Linux—服务器SSL/TLS快速检测工具(TLSSLed)
    Linux—yum使用详解
  • 原文地址:https://www.cnblogs.com/gengzhen/p/15480769.html
Copyright © 2011-2022 走看看