CodeHelper CodeHelper
首页
JavaScript
PHP
Python
Git速查表 (opens new window)
博客 (opens new window)
首页
JavaScript
PHP
Python
Git速查表 (opens new window)
博客 (opens new window)
  • 开始

    • 使用
  • 函数方法

    • 字符串
    • 数字
    • 数组
    • 日期时间
    • 缓存
    • 深浅拷贝
      • 浅拷贝
      • 深拷贝
        • 深度克隆
    • 正则
    • md5
    • 其它
  • 梳理

    • 循环
  • 高级操作

    • 类型转换技巧
    • 防抖与节流
    • Promise实现
目录

深浅拷贝

# 浅拷贝

只会对第一层的可枚举的属性进行独立的复制;对于基本数据类型会完全拷贝一份数据,引用数据类型只拷贝了内存地址。一些常用的方法有:

  • Object.assign
  • ES6 扩展运算符。 let zhangSan = {...user}
  • Array.slice 和 Array.concat

# 深拷贝

  • JSON.parse(JSON.stringify(data))
    • 函数、undefined、symbol 这几种类型无法被拷贝,经过JSON.stringify后会消失
    • 无法拷贝不可枚举的属性
    • 无法拷贝对象的原型链
    • Date类型会变成字符串
    • RegExp类型会变成空对象
    • 对象中含有 NaN、Infinity 以及 -Infinity, JSON 序列化的后会变成 null
    • 无法拷贝对象的循环应用,即对象成环 (obj[key] = obj)

# 深度克隆

递归拷贝所有层级

来源 (opens new window)

// 判断arr是否为一个数组,返回一个bool值
function isArray (arr) {
    return Object.prototype.toString.call(arr) === '[object Array]';
}

// 深度克隆
function deepClone (obj) {
	// 对常见的“非”值,直接返回原来值
	if([null, undefined, NaN, false].includes(obj)) return obj;
    if(typeof obj !== "object" && typeof obj !== 'function') {
        //原始类型直接返回
        return obj;
    }
    var o = isArray(obj) ? [] : {};
    for(let i in obj) {
        if(obj.hasOwnProperty(i)){
            o[i] = typeof obj[i] === "object" ? deepClone(obj[i]) : obj[i];
        }
    }
    return o;
}

export default deepClone;
上次更新: 2022/08/23, 18:58:25
缓存
正则

← 缓存 正则→

Theme by Vdoing | Copyright © 2022-2023 CodeHelper
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式