javascript 值传递

在js中 简单类型是值传递 复杂类型是引用传递

  简单类型:String Number Boolean undefined Null

  复杂类型:Object 

 下面的代码演示这个

    var simpleName = "cindy";
    var obj = {
        "name":"radish",
        "age":24
    };
    var list = [
        obj,
        {
            "name":"ruby",
            "age":22,
            "friends":[obj, "cindy"],
            sayHello:function () {
                alert("hello" + this.friends);
            }
        }];
    //深拷贝 不受影响
    console.log(markName(deepCopy(simpleName),"_js"));//cindy_JS
    console.log(simpleName);//cindy
    //未拷贝 也没变化
    //console.log(markName(simpleName,"_js"));
    //console.log(simpleName);

    //深拷贝 不受影响
    console.log(markName(deepCopy(obj),"_js"));
    console.log(obj);
    //未拷贝 对象被改变
    //console.log(markName(obj,"_js"));
    //console.log(obj);

    //深拷贝 不受影响
    console.log(markName(deepCopy(list), "_js"));
    console.log(list);
    //未拷贝 对象被改变
    //console.log(markName(list,"_js"));
    //console.log(list);

    //给对象的name属性添加_JS后缀
    function markName(source, flag) {
        var type = typeof source, simpleType = ["string", "number", "boolean"];
        if (!source) {
            return source;
        } else if (-1 != simpleType.indexOf(type)) {
            return source + flag;
        } else {
            for (var i in source) {
                source[i] = typeof source[i] === "object" ? markName(source[i], flag) : "name" == i ? source[i] + flag : source[i];
            }
            return source;
        }
    }
    ;
    //深拷贝对象
    function deepCopy(obj){
        var type = typeof obj, simpleType=["string","number","boolean"], rs;
        if(obj){
            if(-1!=simpleType.indexOf(type)){
                rs = obj;
            }else{
                rs= obj.constructor === Array? []:{};
                for(var i in obj){
                    if(obj.hasOwnProperty(i)){
                        rs[i] = typeof obj[i]==="object"? deepCopy(obj[i]):obj[i];
                    }
                }
            }
        }else{
            rs = "error";
        }
        return rs;
    }

 

 

 

 

posted @ 2013-07-17 18:27  x.radish  阅读(192)  评论(0编辑  收藏  举报