1.如果克隆对象是基本类型,直接复制就可以

<script type="text/javascript">
var str1 = 'abc'
var str2 = str1
console.log(str2) //abc
str1 = '123'
console.log(str2) //abc
</script>

2.不是基本类型就不可以直接复制,以数组为例

<script type="text/javascript">
var a=[1,2,3,4];
var b= a;
var c=b;
c.pop();

console.log(a) //[1,2,3]
console.log(b) //[1,2,3]
console.log(c) //[1,2,3]

</script>

克隆的几种方法

//1.比较简单的遍历数组赋值
<script type="text/javascript">
var a = [1,2,3,4];
var b = [];
for(var i = 0; i < a.length; i++){
b.push(a[i])
}
console.log(b) //[1,2,3,4]

</script>

//2.slice方法
/*
1) 作用:从一个数组中截取出新的数组
2) 格式:数组名.slice(begin,end);
 begin表示开的下标
 end表示结束的下标,但是在截取时不包含结束下标对应的元素
3) 注意:
 原数组不受影响
 如果只设置一个参数,即begin,那么会从begin截取到最后
 如果不写参数,那么slice方法可以实现数组的复制 */

<script type="text/javascript">
var arr1 = [1, 2, 3, 4]
var arr2 = arr1.slice(0)
console.log(arr2) //[1,2,3,4]
arr1 = [4, 3, 2, 1]
console.log(arr2) //[1,2,3,4]

</script>

//3.assign实现深浅克隆
//浅克隆
<script type="text/javascript">
var obj = { a: 1 };
var copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }


var arr = [1,2,3];
var copy = Object.assign([], arr);
console.log(copy); // [1,2,3]


//深克隆
let arr1 = [1,2,3,4,5];
let arr2 = JSON.parse(JSON.stringify(arr1));
console.log(arr2) //[1,2,3,4,5]

</script>

//4.concat方法
/*1) 作用:拼接数组
2) 格式:数组名1.concat(数组名2);就是指将数组2拼接在数组1后面
3) 返回值:为拼接后的新的数组
4) 注意:原数组不受影响*/
<script type="text/javascript">

let arr1 = [1,2,3,4];

let arr2 = arr1.concat()

arr2[1] = 9
console.log(arr1, arr2) //[1,2,3,4], [1,9,3,4]

</script>
---------------------
版权声明:本文为CSDN博主「Hero4399」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hero4399/article/details/78298994

js中的克隆的更多相关文章

  1. JS中的prototype

    JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...

  2. JS中的prototype(原文地址:http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html)

    JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...

  3. JS中的prototype///////////////////////////z

    JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...

  4. 论js中的prototype

    今天在阅读代码时,碰到了prototype //判断是否是数组function isArray(obj) { return Object.prototype.toString.call(obj) == ...

  5. (转载)JS中的prototype

    原文地址:http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html#!comments JS中的phototype是JS中比较难理解的 ...

  6. [转]JS中的prototype

    JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...

  7. Javascript基础 - js中曾经忽略的知识点

    深入那些曾经忽略的Javascript知识 1. parseInt(string, [radix]),parseFloat(string) 一般我们省略第二个参数,parseInt(‘100’) == ...

  8. js中实现继承的几种方式

    首先我们了解,js中的继承是主要是由原型链实现的.那么什么是原型链呢? 由于每个实例中都有一个指向原型对象的指针,如果一个对象的原型对象,是另一个构造函数的实例,这个对象的原型对象就会指向另一个对象的 ...

  9. JS中的函数、Bom、DOM及JS事件

    本期博主给大家带来JS的函数.Bom.DOM操作,以及JS各种常用的数据类型的相关知识,同时,这也是JavaScript极其重要的部分,博主将详细介绍各种属性的用法和方法. 一.JS中的函数 [函数的 ...

随机推荐

  1. DAY1-作业

    Python-day1-------> 本节内容: Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据 ...

  2. Selenium-----wait的三种等待

    在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...

  3. 两种最常用的 HTTP 方法:GET 和 POST。

    什么是 HTTP? 超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信. HTTP 的工作方式是客户机与服务器之间的请求-应答协议. web 浏览器可能是客户端,而计算机上的网络应用程 ...

  4. 国内 PHP Composer 镜像列表(2019-07-07)

    目录 国内 PHP Composer 镜像列表 Composer 是什么? 镜像列表 配置镜像 本文历史 参考 国内 PHP Composer 镜像列表 Composer 是什么? Composer ...

  5. iOS7之后JavaScript与Objective-C之间的通信

    http://www.cocoachina.com/ios/20150906/13320.html 最近公司用Ping++集成了第三方支付,并且微信端也集成了这个功能,而微信付款时需要调用原生的支付宝 ...

  6. HTTP请求模型

    HTTP请求模型 HTTP请求模型 一.连接至Web服务器一个客户端应用(如Web浏览器)打开到Web服务器的HTTP端口的一个套接字(缺省为80). 例如:http://www.myweb.com: ...

  7. SDUT-2120_数据结构实验之链表五:单链表的拆分

    数据结构实验之链表五:单链表的拆分 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入N个整数顺序建立一个单链表,将该 ...

  8. 使用 Captcha 扩展包 为 Laravel 5 应用生成验证码

    http://laravelacademy.org/post/3910.html 1.安装 我们通过 Composer 安装 Captcha 扩展包: composer require mews/ca ...

  9. mysql把一个表的字段update成另一个表的字段根据id

    mysql把一个表的字段update成另一个表的字段根据id 1.填充activity表里面的creator字段,用org的founderid,其中activity的orgid要和org的id对应,具 ...

  10. A - Archery Tournament 动态开点+vecotor 神仙题

    存图还是像矩形一样的存,每个节点存所在区级内部的圆的编号,然后暴力判断,开始我也有这个想法,但是...这TM也能过...仔细想想,貌似好像是可以过,时间复杂度玄学无法证明.... #include&l ...