JavaScript数据类型及赋值问题

JavaScript生成对象并进行赋值弹出
相关代码如下:

var a=new Object();
a.value=1;
  b=a;
b.value=2;
alert(a.value);

如何解释最终结果为2?

阅读 3.3k
3 个回答

a是对象,所以a应该是保存了一个地址,这个地址指向了a存储的实际内容,b=a并不是将a指向地址的内容复制给b而是把a保存的地址给了b,即使得b与a指向同一个地址(a存储的实际内容),所以b.value=2设置的是a存储的实际内容,a存储的实际内容的值改变了,所以a.value也改变了。
详细的话可以百度下js传值和传址

任意一本JavaScript的入门书籍都会告诉你答案——
引用类型变量的直接赋值只会将地址赋值,而不是重新生成个新的变量然后复制其内容。

(1) 基本类型和引用类型

javascrip变量包含两种类型的值,一种为引用类型的值,一种是基本类型的值。引用类型包括:Array,Object,Function(可以这么理解,非基本类型的都是引用类型);5种基本类型包括:undefined,null,string,boolean,number

(2) 变量复制的区别

当一个变量复制引用类型的值时,同样也会将存储在变量对象中的值复制一份放到为新变量分配的空间中。不同的是这个值的副本实际上是一个指针,而这个指针指向存储在堆中的一个对象。复制操作结束后,两个变量实际上将引用同一个对象。因此改变其中一个变量,就会影响到另一个变量

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