JHCan333
2017-03-01 03:04
采纳率: 79.5%
浏览 2.0k

js中的传值问题,被引用赋值和传值赋值搞晕了

var a = {name:'1',value:'2'};我想新建一个变量b。使b等于a的值,而且进行操作,但是不能影响a所指向的地址,应该怎么做啊?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • 宁00 2017-03-01 03:33
    已采纳

    赋值前先把json对象转成字符串,再转回来

    var a = {name:1, value:2};
    var b = JSON.parse(JSON.stringify(a));
    b.name = 'mary';
    console.log(a===b, a.name, b.name); // false, 1, mary
    
    点赞 打赏 评论
  • qq_34379959 2017-03-01 03:05

    var b = "";
    b==a

    点赞 打赏 评论
  • 任错错 2017-03-01 03:10

    把变量b定义成数组,这样就内容相同,地址不同

    点赞 打赏 评论
  • 360编码 2017-03-01 03:33

    var b={};
    b.push{"name":a.name};
    b.push{"value":a.value};
    你这样试试

    点赞 打赏 评论
  • assange_h 2017-03-01 03:41

    number,string类型都是基本类型,而基本类型存放在栈区,访问时按值访问,赋值是按照普通方式赋值;
    对象和数组是通过引用来赋值的,所以改变a的同时b也会跟着改变。

    var a = 30;
    var b = a;
    a = 20;
    console.log( b ) // 30

    var a = [1,2];
    var b = a;
    a[0] = 5;
    console.log( b ) // [5,2]

    点赞 打赏 评论
  • administratorv 2017-03-01 05:03

    var a= {a:111};var b={a:222}; b.a =a.a; console.info(a);console.info(b); a.a+=22;console.info(a);console.info(b);
    直接声明两个变量,a.a 归为数值,用jquery clone 达到同样的效果。如果a=b 这种情况是引用传递

    点赞 打赏 评论

相关推荐 更多相似问题