js基础问题:对象赋值

ayayad 2014-06-19 11:53:20
var a={"a":0};
var b={};
b=a;
b['a']=1;
alert(a['a']);
这样写会弹出1,为什么,给个详细点的理由行吗
...全文
230 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
__Daniel 2014-06-20
  • 打赏
  • 举报
回复
看错 赋值的时候把里面a的指针传了过去,所以b['a']的改变也改变了a['a']
__Daniel 2014-06-20
  • 打赏
  • 举报
回复
b=a只是赋值,不改变a本身,所以b改变a并没有变
文盲老顾 2014-06-20
  • 打赏
  • 举报
回复
http://www.phperstar.com/post/194

function copyObject(obj){
  var result = {};
  for (var name in obj){
    result[name] = obj[name];
  }
  return result;
}
ayayad 2014-06-19
  • 打赏
  • 举报
回复
那要把a的值传给b怎么办?(不传引用)
xuzuning 2014-06-19
  • 打赏
  • 举报
回复
var a={"a":0};
var b={};
b=a; //这是引用
b={"a":1}; //重新赋值就不是引用了
alert(a['a']); //弹出0

//如果这样
b = a;
b.a = 2;
alert(a['a']); //弹出2
文盲老顾 2014-06-19
  • 打赏
  • 举报
回复
var a={"a":0}; // 实例化一个对象 var b={}; // 实例化一个对象 b=a; // b 与 a 引用同一个对象地址,原有b的实例被注销 b={"a":1}; // b 从新实例化一个对象 b['a']=1; alert(a['a']); 数据存放的地址,只有在新实例化的时候才会变动,其他时候都是引用地址
文盲老顾 2014-06-19
  • 打赏
  • 举报
回复
var a={"a":0}; var b={}; b=a; // b 与 a 引用同一个对象地址 b['a']=1; alert(a['a']); ------------------ var a={"a":0}; var b={}; b=a; // b 与 a 引用同一个对象地址 b={"a":1}; // b 从新建立了一个对象,开辟了新地址 alert(a['a']);
ayayad 2014-06-19
  • 打赏
  • 举报
回复
我查下来好像是js赋值数组和对象时赋的不是值而是引用地址 但是 var a={"a":0}; var b={}; b=a; b={"a":1}; alert(a['a']); 这样写弹出的是0,按照引用地址的方法,这个岂不是也会弹出1?
恶心鬼 2014-06-19
  • 打赏
  • 举报
回复
引用 6 楼 ayayad 的回复:
那要把a的值传给b怎么办?(不传引用)
你可以自己定义一个复制的方法,百度搜一下一大把 或者把对象转换成字符串再解析成json,变相复制过来了~
b=$.parseJSON(JSON.stringify(a))
baidu_16688639 2014-06-19
  • 打赏
  • 举报
回复
b=a;相当于 a和b都指向了{"a":0}; b={"a":1};你操作了b变量指向的对象,因为都指向那个同一个对象。 alert(a['a']);会弹1

87,916

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧