JavaScript数据类型及赋值问题
巴扎黑
巴扎黑 2017-04-11 13:17:03
[JavaScript讨论组]

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

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

如何解释最终结果为2?

巴扎黑
巴扎黑

全部回复(3)
PHPz

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

PHPz

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

大家讲道理

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

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

(2) 变量复制的区别

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号