zoukankan      html  css  js  c++  java
  • javascript中的变量类型思考

    有一个小任务,要求如下:

    // 使用递归来实现一个深度克隆,可以复制一个目标对象,返回一个完整拷贝
    // 被复制的对象类型会被限制为数字、字符串、布尔、日期、数组、Object对象。不会包含函数、正则对象等
    题目解析:

    1深度克隆一个对象:
    首先明白这里的对象有哪些类型:
    数字对象,字符串对象,布尔对象,日期对象,数组对象,Object对象

    这些对象可以分为大致两组,分别为原始对象合成对象
    A、其中Number,String,Boolean对象是原始对象
    B、String,Date,Array,Object对象是合成对象
    数字对象的特点:http://www.w3school.com.cn/jsref/jsref_obj_number.asp
    字符串对象特点:http://www.w3school.com.cn/jsref/jsref_obj_string.asp

    1)对于这些原始对象,直接根据类型(可以通过constructor来判断,例如obj.constructor),然后直接创建该类型的对象,并且返回即可:
    new Number(obj.valueOf());
    new Boolean(obj.valueOf());
    new String(obj.valueOf());
    2)对于复杂对象,那么情况就不一样了。
    例如日期对象,日期对象的讲解:http://www.w3school.com.cn/jsref/jsref_obj_date.asp
    new Date(obj)和 new Date(obj.valueOf())均可以。
    最需要关注的是数组对象和Object对象:

    数组对象可以通过new Array或者字面量方式创建,此处推荐使用字面量创建:[];
    但是在给克隆数组的时候,需要注意一个问题,数组的属性是否克隆?
    即当var src=[]; src.name="gaga";的时候,src的name属性,到底是否克隆过去??
    我的理解:既然是克隆么,就是一毛一样,一毛一样么,自然要都克隆了。
    所以在这里用for(var i in src)的方式进行克隆,也是可以的。

    function cloneObject(src) {
    	if(src == null || src == undefined ||typeof(src) != "object"){
    	    return src;
    	}else{
    	    //为引用类型的
    	    if(src.constructor == Array){//数组
    	        var obj=[];
    	    }else if(src.constructor == Date){//日期
    	        obj = new Date(src);
    	    }else{
    	        obj={};
    	        debugger;
    	        obj.constructor = src.constructor;
    	        obj.__proto__ = Object.getPrototypeOf(src);
    	    }
    	
    	    for(var i in src){
    	        if(typeof src[i] == "object"){//对象的属性为对象
    	            obj[i] = cloneObject(src[i]);//复制对象给obj
    	        }else{
    	            obj[i] = src[i];
    	        }
    	    }
    	    return obj;
    	}
    }
    

    参考文档:http://qianduanblog.com/post/js-learning-30-object-clone-copy.html

  • 相关阅读:
    maven项目诡异的问题
    13) Developing Java Plugins
    15) maven dependency scope
    Bootstrap学习记录
    电力
    MongoDB学习记录
    Java基础知识
    旅游
    人生感悟
    【转】25岁到55岁:如何规划人生最重要的三个十年
  • 原文地址:https://www.cnblogs.com/luckyflower/p/4616268.html
Copyright © 2011-2022 走看看