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

版权声明:EGEEK https://blog.csdn.net/qq_41604269/article/details/82881370

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

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。

猜你喜欢

转载自blog.csdn.net/qq_41604269/article/details/82881370