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. OpenNMS Log Correlator

  2. Linux彩色输出

    在linux下,可以使用一些宏,加上自定义格式输出,让输出更易于调试: 排版出来可能有些乱,注意do{ }while(0);是在一行里就可以了. #include <stdio.h> #i ...

  3. 【Windows 8 Store App】学习一:获取设备信息

    原文http://www.cnblogs.com/java-koma/archive/2013/05/22/3093306.html 通常情况下我们需要知道用户设备的一些信息:deviceId, os ...

  4. 利用指针突破C++编译器的防线

    C++ 面向对象的一大特性就是封装,使用不同的访问控制符来控制外接对其的访问权限.比如: class A { public: A(): i(){} void print(){ cout << ...

  5. C语言入门(5)——运算符与表达式

    C语言中运算符和表达式数量之多,在高级语言中是少见的.正是丰富的运算符和表达式使C语言功能十分完善.这也是C语言的主要特点之一. C语言的表达式由运算符.常量及变量构成.C语言表达式基本遵循一般代数规 ...

  6. 截取字符串一之substring

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

  7. frameset常用属性

    框架是网页画面分成几个框窗(不同的窗口对应不同页面以几个网页的形式显示),同时取得多个 src的地址.页面所有框架标记需要放在一个总起的 html 档,这个档案只记录了该框架如何分割 ,不会显示任何资 ...

  8. server宕机监控、检測、报警程序(139绑定手机短信报警)monitor_down.sh

    宕机监控报警程序 一.   需求来源 宕机对运维人员来说,最痛苦了.怎样检測一台server是否还在正常执行,假设该server宕机,怎样在第一时间监測到并通知一线运维人员进行维护,最大化降低损失. ...

  9. 发现一个名为“Douyu”的国人项目

    刚刚在javaeye看到一个名为Douyu的国人项目,认为搞下去未来可能非常有意思,放到blog上做个标记. ——————下面是转载的作者原文——————— 原文地址例如以下:http://zhh20 ...

  10. LDAP基础

    超级好的LDAP文章: Linux下基于LDAP统一用户认证的研究 : http://chenguang.blog.51cto.com/350944/285602利用LDAP实现windows和Lin ...