关于js里面对象赋值的问题

erstens 2015-11-11 10:39:54

function test() {
var obj1 = {id:1,name:''} ;
var obj2 = obj1 ;
obj2.id = 2 ;
alert(obj2.id) ;
alert(obj1.id) ;
}

两次输出的结果是一样的,请问是什么原因???
...全文
404 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
erstens 2015-11-17
  • 打赏
  • 举报
回复
引用 5 楼 darlaSeussNight 的回复:
首先变量的值分为原始类型和引用类型 ,原始类型就是值保存在本地 你的变量声明的是对象很明显是引用类型,在内存中obj1和obj2 保存的只是一个相同的地址 这个地址指向等号后面的对象 相当于obj1,2指的同一个事物。 你将这个值改变后 obj1 2还是指向它输出必然一致 如果想输出不通很简单 改变其中一个变量的引用 如下 var a=b={n:1} a={n:2} console.log(a)//{n:2} console.log(b)//{n:1} ab本来指向同一引用,我将a指向新对象 b仍然指向老对象 输出自然不同了
谢谢各位,已经解决了,新创建了一个对象{},感谢大家。
一桶子弹 2015-11-13
  • 打赏
  • 举报
回复
首先变量的值分为原始类型和引用类型 ,原始类型就是值保存在本地 你的变量声明的是对象很明显是引用类型,在内存中obj1和obj2 保存的只是一个相同的地址 这个地址指向等号后面的对象 相当于obj1,2指的同一个事物。 你将这个值改变后 obj1 2还是指向它输出必然一致 如果想输出不通很简单 改变其中一个变量的引用 如下 var a=b={n:1} a={n:2} console.log(a)//{n:2} console.log(b)//{n:1} ab本来指向同一引用,我将a指向新对象 b仍然指向老对象 输出自然不同了
zpjshiwo77 2015-11-12
  • 打赏
  • 举报
回复
引用 3 楼 feng2ge4 的回复:
那这个要怎样才能实现输出结果不一样?
重新初始化一个对象:

var obj1 = {id:1,name:''} ;
var obj2 = {id:1,name:''} ;
wis2007 2015-11-11
  • 打赏
  • 举报
回复
var obj2 = obj1 ; 这里把obj1对象指向了obj2对象
feng2ge4 2015-11-11
  • 打赏
  • 举报
回复
那这个要怎样才能实现输出结果不一样?
天际的海浪 2015-11-11
  • 打赏
  • 举报
回复
对象是引用传递的,直接赋值是让两个变量指向同一个对象的地址

87,907

社区成员

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

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