javascript实例区分基本数据类型和引用数据类型

说之前先来介绍一下基本数据类型和引用数据类型指的到底是哪些数据类型。

1、五种基本数据类型:Number、String、Boolean、Null、Undefined

2、引用数据类型:Object

实例区分:

<script>
//基本数据类型代表Number
var one = 666;
var two = one;  //此时two=666

one++;          //one++,此时one=667
alert("one="+one); //结果one=667
alert("two="+two); //结果two=666


//引用数据类型代表Object
var obj1 = new Object();
obj1.one = 666;
var obj2 = obj1;

obj1.one++;
alert("obj1.one="+obj1.one);    //结果obj1.one=667
alert("obj2.one="+obj2.one);    //结果obj2.one=667

</script>

为什么Number的two不会跟着one改变而改变,obj2.one却会跟着obj1.one的改变而改变呢?

因为,值与值是独立存在,修改一个变量值不会影响其他的变量值。而对象是保存在堆内存中的,每创建一个新的对象就在堆内存中开辟出一个新的空间,变量保存的是对象的内存地址(对象的引用),如果两个对象保存的是同一个对象引用,当一个通过一个变量修改属性是,另一个也会跟着改变。

例子中,对象obj1的one属性保存的是内存地址(引用),假设该地址是a,a地址里放了值666。当obj2=obj1时,两个对象都指向了同一个a地址,当obj1.one++时,a地址里的变量one也发生了改变,因为obj2.one=a地址里的one,所以obj2.one的值也发生改变,最后所有one都等于667。

 

引用数据类型的第二种情况:

<script>

//第二种情况,对象断开和内存的连接
var obj1 = Object();
var obj2 = obj1;
obj2=null;

alert("obj1是"+obj1);  //obj1是Object
alert("obj2是"+obj2);  //obj2是null
</script>

当对象obj2断开和内存的连接时,obj1不会跟着改变。

引用数据类型的第三种情况:

<script>
var obj1 = new Object();
var obj2 = new Object();

alert(obj1==obj2);  //结果返回false
</script>

为什么不相等呢?

因为比较两个引用数据类型时,比较的是对象的内存地址。即使两个对象是一模一样的,但是地址不同(每创建一个新的对象就在堆内存中开辟出一个新的空间),结果也是false。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值