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. SpringBoot Actuator监控【转】

    springboot actuator 监控 springboot1.5和springboot2.0 的actuator在启动日志上的差异就很大了. springboot1.5在启动时会打印很多/XX ...

  2. Leetcode746.Min Cost Climbing Stairs使用最小花费爬楼梯

    数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始). 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯. 您需 ...

  3. oralce使用INSERT语句向表中插入数据

    INSERT   INTO    table[ (column [, column. . .])] VALUES            (value [,value . . .]); v  插入的数据 ...

  4. [React Native]访问操作系统剪贴板 Clipboard

    我们之前学习了TextInput组件, 有时候我们需要在TextInput组件中复制或者粘贴一些文字. React Native为开发者提供了 Clipboard API,Clipboard 组件可以 ...

  5. ADO.NET_02

    一.说明 这个例子是小白跟着学习代码记录,模拟用户登陆功能,并可以查询所有学生信息. 二.代码 共4个文件,如下 App.config <?xml version="1.0" ...

  6. 设置select和option的文字居中

    select{ width: auto;      padding: 0 1%; //左右一定要设置      margin: 0; } option{ text-align:center; }

  7. js下载文件方法与原理小分析

    原理:html的a标签,设置dawnload属性后,可以下载href指向的文件. 在js中往往是点击某一个按钮后下载一个文件,并且文件的地址是变化的.因此我们可以动态创建一个a标签,设置好downlo ...

  8. 学习layer弹层组件移动版

    layer弹层组件官网 常用参数: shadeClose:默认true,是否点击遮罩时关闭层

  9. shell awk杂项

    awk '{ ;++i<=NF;){ a[i]=a[i]?a[i]",'\''"$i"'\''":"'\''"$i"'\'' ...

  10. iptables 规则(Rules)

    iptables的每一条规则(rule),都是由两部分组成的,第一部分包含一或多个「过滤条件」其作用是检查包是否符合处理条件(所有条件都必须成立才算数) :第而部分称为「目标」,用於決定如何处置符合条 ...