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
    

      

  • 相关阅读:
    谷歌开发调试工具
    由form表单来说说前后台数据之间的交互
    ajax的post和get请求的使用
    css各属性的理解
    Http Servlet详解及学习地址
    表单详细解释
    JS正则表达式
    jQuery-AJAX简介
    POJ1008 Maya Calendar
    关于Code Blocks无编译器版本及VC6.0插入、打开报错
  • 原文地址:https://www.cnblogs.com/gengzhen/p/15480769.html
Copyright © 2011-2022 走看看