js对象深度克隆代码实现,js浅克隆和深克隆的区别

本文目录一览:

JS中如何进行对象的深拷贝

//拷贝数据,深拷贝数据,绝对不会出现对象与数组引用相同位置

var copyData = function(item) {

if(item == null) {

return null;

}

if($.isArray(item)) {

var newArray = [];

for(var i=0;iitem.length;i++) {

newArray.push(copyData(item[i]));

}

return newArray;

}

if($.isPlainObject(item)) {

var newObj = {};

for(var p in item) {

newObj[p] = copyData(item[p]);

}

return newObj

}

return item;

}

JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析

本文实例讲述了JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能。分享给大家供大家参考,具体如下:

根据不包含引用对象的普通数组深拷贝得到启发,不拷贝引用对象,拷贝一个字符串会新辟一个新的存储地址,这样就切断了引用对象的指针联系。

测试例子:

var

test={

a:”ss”,

b:”dd”,

c:[

{dd:”css”,ee:”cdd”},

{mm:”ff”,nn:”ee”}

]

};

var

test1

=

JSON.parse(JSON.stringify(test));//拷贝数组,注意这行的拷贝方法

console.log(test);

console.log(test1);

test1.c[0].dd=”change”;

//改变test1的c属性对象的d属性

console.log(test);

//不影响test

console.log(test1);

测试结果:

根据测试结果,我们可以看到,test1已经从test复制一份,并且test1改变其中属性的值时,对原来的对象test没有造成影响。

JSON.parse(),JSON.stringify()兼容性问题

可以通过为IE7以及IE7以下版本的IE浏览器引入json2.js,使用json2.js来解决JSON的兼容性问题

!–[if

lt

IE

7]

script

src=”具体放路径/json2.js”/script

![endif]–

json2.js的github地址为:

好了,到这里就实现了,使用JSON.parse(),JSON.stringify()对对象的深拷贝~~

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

您可能感兴趣的文章:JavaScript基于遍历操作实现对象深拷贝功能示例JavaScript对象的浅拷贝与深拷贝实例分析JavaScript

中对象的深拷贝js对象浅拷贝和深拷贝详解浅谈JavaScript中面向对象的的深拷贝和浅拷贝jQuery深拷贝Json对象简单示例JavaScript对象拷贝与赋值操作实例分析浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)JavaScript对象拷贝与Object.assign用法实例分析js实现数组和对象的深浅拷贝

js怎么克隆对象

这题的意思是把一个对象中的内容一级一级的复制到另外一个对象中。用for(var i in obj)的方式就可以了。

至于类型,js虽然是弱类型,但其实是有类型的,如数字类型,就是Number,对象类型就是Object,String,Date,Array,Boolean,Function等,然要判断对象的类型也很简单,如:

var a = 2;

a.constructor == Number;// 判断是否为数值

a.constructor == String;// 判断是否为字符串 a = “test”

a.constructor == Date;// 判断是否为日期 a = new Date()

a.constructor == Array;// 判断是否为数组 a = [1,”2″,true]

a.constructor == Boolean;// 判断是否为布尔型 a = true

a.constructor == Object;// 判断是否为对象 a = {}

a.constructor == Function;// 判断是否为方法类型 a = function(){}

如何使用原生 javascript 代码深度克隆一个对象

var s = {“a”: “aaaaa”},

lightClone = {},

deepClone = {};

//浅clone

lightClone = s;

lightClone.a = ‘lightClone’;

console.log(lightClone.a);//lightClone

console.log(s.a);//lightClone

//深clone

s = {“a”: “aaaa”};

for(var k in s) {

deepClone[k] = s[k];

}

deepClone.a = “deepClone”;

console.log(deepClone.a);//deepClone

console.log(s.a);//aaaaa

js实现深拷贝的几种方法

简单来说,深拷贝主要是将另一个对象的属性值拷贝过来之后,另一个对象的属性值并不受到影响,因为此时它自己在堆中开辟了自己的内存区域,不受外界干扰。

浅拷贝主要拷贝的是对象的引用值,当改变对象的值,另一个对象的值也会发生变化。

使用 js ON.stringify和 js ON.parse实现深拷贝:JSON.stringify把对象转成字符串,再用JSON.parse把字符串转成新的对象;

缺陷:它会抛弃对象的 const ructor,深拷贝之后,不管这个对象原来的构造 函数 是什么,在深拷贝之后都会变成Object;这种方法能正确处理的对象只有 Number, String, Boolean, Array, 扁平对象,也就是说,只有可以转成JSON格式的对象才可以这样用,像function没办法转成JSON;

递归拷贝实现深拷贝,解决循环引用问题

原创文章,作者:AWGNU,如若转载,请注明出处:https://www.506064.com/n/317506.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
AWGNUAWGNU
上一篇 2025-01-11 16:27
下一篇 2025-01-11 16:27

相关推荐

  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python字符串宽度不限制怎么打代码

    本文将为大家详细介绍Python字符串宽度不限制时如何打代码的几个方面。 一、保持代码风格的统一 在Python字符串宽度不限制的情况下,我们可以写出很长很长的一行代码。但是,为了…

    编程 2025-04-29
  • Python中new和init的区别

    new和init都是Python中常用的魔法方法,它们分别负责对象的创建和初始化,本文将从多个角度详细阐述它们的区别。 一、创建对象 new方法是用来创建一个对象的,它是一个类级别…

    编程 2025-04-29
  • Python基础代码用法介绍

    本文将从多个方面对Python基础代码进行解析和详细阐述,力求让读者深刻理解Python基础代码。通过本文的学习,相信大家对Python的学习和应用会更加轻松和高效。 一、变量和数…

    编程 2025-04-29
  • 仓库管理系统代码设计Python

    这篇文章将详细探讨如何设计一个基于Python的仓库管理系统。 一、基本需求 在着手设计之前,我们首先需要确定仓库管理系统的基本需求。 我们可以将需求分为以下几个方面: 1、库存管…

    编程 2025-04-29
  • Python满天星代码:让编程变得更加简单

    本文将从多个方面详细阐述Python满天星代码,为大家介绍它的优点以及如何在编程中使用。无论是刚刚接触编程还是资深程序员,都能从中获得一定的收获。 一、简介 Python满天星代码…

    编程 2025-04-29
  • Sublime Test与Python的区别

    Sublime Text是一款流行的文本编辑器,而Python是一种广泛使用的编程语言。虽然Sublime Text可以用于编写Python代码,但它们之间有很多不同之处。接下来从…

    编程 2025-04-29
  • 写代码新手教程

    本文将从语言选择、学习方法、编码规范以及常见问题解答等多个方面,为编程新手提供实用、简明的教程。 一、语言选择 作为编程新手,选择一门编程语言是很关键的一步。以下是几个有代表性的编…

    编程 2025-04-29
  • Python实现简易心形代码

    在这个文章中,我们将会介绍如何用Python语言编写一个非常简单的代码来生成一个心形图案。我们将会从安装Python开始介绍,逐步深入了解如何实现这一任务。 一、安装Python …

    编程 2025-04-29
  • 怎么写不影响Python运行的长段代码

    在Python编程的过程中,我们不可避免地需要编写一些长段代码,包括函数、类、复杂的控制语句等等。在编写这些代码时,我们需要考虑代码可读性、易用性以及对Python运行性能的影响。…

    编程 2025-04-29

发表回复

登录后才能评论