浅谈克隆 JavaScript


Posted in Javascript onNovember 02, 2021

1、浅克隆

浅克隆无法copy数组和对象

var obj = {
    name : "abs",
    age : '18',
    sex : 'male'
}
var obj1 = {}
function clone(Origin,target) {
    target = target || {};//防止用户不输入target
    for(var k in Origin){
        target[k] = Origin[k];
    }
}
clone(obj,obj1);

2、深克隆

先判断它是什么,原始值,数组还是对象,分别处理

  • 遍历对象
  • 是原始值直接copy
  • 不是原始值判断是数组还是对象
  • 是数组建空数组
  • 是对象建空对象
  • 建立了之后再遍历一遍原始对象或数组里是啥
  • 递归
var obj = {
    name : 'lin',
    age : '18',
    sex : 'male',
    card : [1,2,3,4],
    wife : {
        name : 'bcsds',
        son : {
            name : 'aaa'
        },
        age : '23'
    }
}
var obj1 = {}
//原始值和对象数组typeof返回值有区别
function deepClone(origin,target) {
    target = target || {};
    for(var k in origin) {
        if(origin.hasOwnProperty(k)){
            if(typeof(origin[k]) == 'object') {
                if(Object.prototype.toString.call(origin[k]) == '[object Array]') {
                    target[k] = [];
                }else {
                    target[k] = {};
                }
                deepClone(origin[k],target[k]);
            }else {
                target[k] = origin[k];
            }
        }
    }
}
deepClone(obj,obj1);
Javascript 相关文章推荐
jquery 中多条件选择器,相对选择器,层次选择器的区别
Jul 03 Javascript
jquery中获取id值方法小结
Sep 22 Javascript
Js获取数组最大和最小值示例代码
Oct 29 Javascript
jQuery Ajax()方法使用指南
Nov 19 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
Mar 01 Javascript
怎么引入(调用)一个JS文件
May 26 Javascript
jQuery图片轮播插件——前端开发必看
May 31 Javascript
js中常用的Math方法总结
Jan 12 Javascript
javascript实现的图片预览功能
Mar 25 Javascript
几种响应式文字详解
May 19 Javascript
AngularJS实现表单验证功能详解
Oct 12 Javascript
手写实现JS中的new
Nov 07 Javascript
WebWorker 封装 JavaScript 沙箱详情
quickjs 封装 JavaScript 沙箱详情
Nov 02 #Javascript
js 数组 fill() 填充方法
浅谈 JavaScript 沙箱Sandbox
详解 TypeScript 枚举类型
Nov 02 #Javascript
前端JavaScript大管家 package.json
JavaScript 原型与原型链详情
You might like
PHP中Session的概念
2006/10/09 PHP
PHP中文汉字验证码
2007/04/08 PHP
PHP跳转页面的几种实现方法详解
2013/06/08 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
firefox中JS读取XML文件
2006/12/21 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
JavaScript常用判断写法大全(推荐)
2016/05/30 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
JS检测是否可以访问公网服务器功能代码
2017/06/19 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
2017/10/26 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
Python检测QQ在线状态的方法
2015/05/09 Python
Python实现优先级队列结构的方法详解
2016/06/02 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
Python 跨.py文件调用自定义函数说明
2020/06/01 Python
Appium+Python实现简单的自动化登录测试的实现
2021/01/26 Python
东南亚地区最大的购物网站Lazada新加坡站点:Lazada.sg
2016/07/17 全球购物
廉价航班、机票和酒店:JustFly
2018/02/07 全球购物
银行实习鉴定
2013/12/13 职场文书
探矿工程师自荐信
2014/01/24 职场文书
公司司机岗位职责范本
2014/03/03 职场文书
初一学生期末评语
2014/04/24 职场文书
英语导游欢迎词
2015/09/30 职场文书
GoLang中生成UUID唯一标识的实现
2021/05/08 Golang
用python开发一款操作MySQL的小工具
2021/05/12 Python
如何vue使用el-table遍历循环表头和表体数据
2022/04/26 Vue.js