一个简单的JS问题

demo1

var a = {n:1}
var b = a
b.n = 3
console.log(a)

输出:{n: 3}

demo1

var a = 1
var b = a
b = 3
console.log(a)

输出: 1

能否简单的说明一下为什么 demo1 的值 a 会变化,demo2 的值 a 不会变化?

阅读 2.1k
2 个回答

https://www.runoob.com/w3cnot...

对于下面的例子,a是基本类型的数据,它本身存的值就是这个数据,把它赋值给b,就是复制了一份过去,所以改变b不会影响a

对于上面的例子,a是引用类型的数据,a的值其实是对象{n:1}在内存中的地址,把它赋值给b,是把对象{n:1}的地址复制了一份过去,所以a和b本质上指向的还是同一个数据,对b的修改页当然会影响到a了

Js中引用类型与基本类型的区别,基本类型复制存储在栈中,引用类型赋值是指针,指向堆中数据首地址,因此出现这种情况。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题