ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

07-基本数据类型与引用数据类型

2021-12-25 20:03:09  阅读:164  来源: 互联网

标签:log obj2 obj 07 数据类型 引用 console name


07-基本数据类型与引用数据类型

在JS中

  基本数据类型:Number    String    Boolean    Undefined    Null

  引用数据类型:Object

问题一

1     <script type="text/javascript">
2         var a = 1;
3         var b = a;
4         a++;
5         console.log("a = " + a);
6         console.log("b = " + b);
7     </script>
View Code

 

 

执行上面的代码,我们可以发现a的值发生了改变(由原来的1变为2),但是b的值并没有发生改变

 

问题二

 1     <script type="text/javascript">
 2         var a = 1;
 3         var b = a;
 4         a++;
 5         console.log("a = " + a);
 6         console.log("b = " + b);
 7 
 8         var obj = new Object();
 9         obj["name"] = "孙悟空";
10         var obj2 = obj;
11         obj["name"] = "唐僧";
12         console.log("obj.name = " + obj.name);
13         console.log("obj2.name = " + obj2.name);
14     </script>
View Code

 

 

执行这段 代码,我们发现obj的name的值与obj2的1name的值都发生了相应的改变,都由“孙悟空”变成了“唐僧”

探讨原因

那么产生上面这两个问题的原因是什么呢?
之所以产生上面这两种情况是因为在JS中基本数据类型和引用数据类型储存方式不同,基本数据类型保存的是值,引用数据类型保存的是内存地址。

下面我用两幅图解释一下产生这种状况的原因:

 

 

 

 问题再探

我们再来看一个有趣的例子:

1         var obj = new Object();
2         var obj2 = new Object();
3         obj.name = "孙悟空";
4         obj2.name = "孙悟空";
5         console.log(obj);
6         console.log(obj2);
View Code

执行上面代码,我们得到如下图所示的结果,我们明显能够观察到这两个对象是相同的

 

但是当我们在这里添加这样一行代码:

console.log(obj == obj2);

这句代码执行结果如下图所示,为False,此时我们就能看到有趣之处,明明我们第一次看到的打印出来的两个对象是相同的,但是使用代码判断结果确实False。

 

 

下面我来解释一下原因:

还是因为引用数据类型里面保存的是内存地址,我们创建了两个相同的对象,等于是开辟了两块内存,每一块内存对应一个内存地址,我们执行obj == obj2的时候实际上是判断内存这两个内存的地址是否相同。

 总结

在JS中引用数据类型中保存的都是内存地址,基本数据类型中保存的是值

 

标签:log,obj2,obj,07,数据类型,引用,console,name
来源: https://www.cnblogs.com/xhlqss/p/15731434.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有