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. 纯CSS3实现Metro Icon

    在线演示 本地下载

  2. Python之整数类型

    整数:18,73,84 每一个整数都有如下的功能:class int(object): """ int(x=0) -> int or long int(x, bas ...

  3. mariadb配置文件优化参数

    mariadb数据库优化需要根据自己业务需求以及根据硬件配置来进行参数优化,下面是一些关于mariadb数据库参数优化的配置文件. 1 如下为128G内存32线程处理器的mariadb配置参数优化: ...

  4. ta-lib 里的蜡烛图形态函数源码

    ta-lib 里的蜡烛图形态函数源码 以CDL2CROWS为例, 看一看c语言的源码: 有关的源码文件包括 d:\Documents\Pictures\ta-lib\c\src\ta_func\ta_ ...

  5. 去除selet标签默认样式

    select { /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/ border: solid 1px #000; /*很关键:将默认的select选择框样式清除*/ appe ...

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

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

  7. 【转】solr deltaImportQuery deltaQuery parentDeltaQuery 用法规则

    solr deltaImportQuery deltaQuery parentDeltaQuery 用法规则 by 建良 · 2013 年 6 月 20 日 query是获取全部数据的SQL delt ...

  8. 2018-8-10-Roslyn-节点的-Span-和--FullSpan-有什么区别

    title author date CreateTime categories Roslyn 节点的 Span 和 FullSpan 有什么区别 lindexi 2018-08-10 19:16:52 ...

  9. Android Joda-time工具类

    Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time.可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成.   Joda- ...

  10. 宝塔linux

    宝塔linux linux 定时任务管理