1.JavaScript的五种基本数据类型:

NumberStringBooleannullundefined

2.typeof返回的六种数据类型:

NumberStringBooleanundefinedfunctionobject

其中object为复式数据类型,它包含null,array,json等复式数据。

3.对象(object)引用

对象类型(复式数据类型)在内存空间中只占一个内存空间,其变量名就是对该对象所在空间的地址的引用。

 var b=a=[1,2,3];//a和b都指向同一个对象[1,2,3]
b[3]=4;//通过b“指针”改变内存中对象[1,2,3]的值
console.log(a);//[1,2,3,4]
console.log(b);//[1,2,3,4]

因此要实现与原对象的完全脱离,即使对新对象修改也不会影响到原对象,必须对对象进行深度克隆

4.深度克隆

如下一个json对象,包含各种数据类型。通过clone()函数可实现json对象的克隆,在内存中产生两个一样的数据对象。

 var json={
"a":123,
"b":"abc",
"c":true,
"d":function(){alert(1)},
"e":null,
"f":{
"a1":123,
"b1":"aabbcc"},
"g":[1,2,"aabb"],
"i":undefined,
"中国":"中国"
};
function clone(obj) {//克隆函数
var cloneObj;
/*判断类型*/
if (obj.constructor === Array) {
cloneObj = [];//数组
} else {
cloneObj = {};//json
}
/*开始克隆*/
for(var i in obj){
if(typeof obj[i]=="object"){//如果是复式数据类型,object包含null
if(obj[i]===null){//进行判断
cloneObj[i]=null;
}else{
cloneObj[i]=clone(obj[i]);//递归
}
}else{//不是复式数据类型
cloneObj[i] = obj[i];//直接赋值
}
}
return cloneObj;//返回
}

JavaScript的深度克隆的更多相关文章

  1. javascript最新深度克隆对象方法

    javascript最新深度克隆对象方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &qu ...

  2. [转载] javascript实现深度克隆

    js一般有两种不同数据类型的值: 基本类型(包括undefined,Null,boolean,String,Number),按值传递: 引用类型(包括数组,对象),按址传递,引用类型在值传递的时候是内 ...

  3. 原生JavaScript之深度克隆

    先看一下克隆成功后的结果 深度克隆就是将obj的属性克隆到obj1上面,并且在obj上面修改属性不影响obj1上面的属性. 1.先把所有的值都遍历一遍(看是引用值和原始值)用for ( var pro ...

  4. javascript构造函数深度克隆递归

    <script type="text/javascript"> var obj={ name:'段丛磊', gex:18, sss:['李伟',18], fun:fun ...

  5. JavaScript实现对象的深度克隆及typeof和instanceof【简洁】【分享】

    JavaScript实现对象的深度克隆 代码实现如下: <!DOCTYPE html> <html lang="en"> <head> < ...

  6. javascript中对象的深度克隆

    记录一个常见的面试题,javascript中对象的深度克隆,转载自:http://www.2cto.com/kf/201409/332955.html 今天就聊一下一个常见的笔试.面试题,js中对象的 ...

  7. javascript深度克隆与javascript的继承实现

    1.javascript深度克隆: //注意这里的对象包括object和array function cloneObject(obj){ var o = obj.constructor === Arr ...

  8. Javascript深度克隆一个对象

    Javascript中的对像赋值与Java中是一样的,都为引用传递.就是说,在把一个对像赋值给一个变量时,那么这个变量所指向的仍就是原来对 像的地址.那怎么来做呢?答案是“克隆”. 克隆有两种方法:一 ...

  9. javascript深度克隆函数deepClone

    javascript深度克隆函数deepClone function deepClone(obj) { var _toString = Object.prototype.toString; // nu ...

随机推荐

  1. cad画指定大小矩形

    指定基点后输入(@长度,宽度)回车 举例:如你要画个600*300的矩形 则输入@600,300回车

  2. nodejs的url模块中的resolve()的用法总结

    var url = require('url'); var a = url.resolve('/one/two/three', 'four') , b = url.resolve('http://ex ...

  3. 给Object扩展新方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Sequence operation(线段树区间多种操作)

    Sequence operation Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  5. [LeetCode] Search a 2D Matrix [25]

    题目 Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the fo ...

  6. XML编程与应用-读取XML

    实例:使用XmlTextReader类的对象读取XML文档 代码如下 using System; using System.Collections.Generic; using System.Linq ...

  7. HTML之学习笔记(三)文本标签

    标题标签 html的标题标签从h1~h6共六个级别,权值不断降低,即不断变小,不用使用CSS控制来取代h标签,因为网页搜索引擎通过搜索到你的页面,找到你页面的h标签并为h标签建立索引,如果h标签被替代 ...

  8. Ubuntu的快捷键

    正如大家都知道的那样,Ubuntu的终端的Terminal能快捷的操作该linux系统,减少鼠标的使用.(vim党,尽量避免使用鼠标) 在Ubuntu中,终端的快捷键为(大小写无关的): Ctrl + ...

  9. Struts学习之自定义拦截器

    * 所有的拦截器都需要实现Interceptor接口或者继承Interceptor接口的扩展实现类    * 要重写init().intercept().destroy()方法        * in ...

  10. html5 input的type属性启动数字输入法

    html5 input的type属性启动数字输入法   当文本框只能输入数字是一个很常见的需求,比如电话号码,身份证号,卡号, 数量....等等只允许数字输入,为了更好的用户体验性,直接写出 启动数字 ...