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;
    }

 

 

 

 

转载于:https://www.cnblogs.com/x-radish/p/3196403.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值