对前端感兴趣的可以关注一下我的博客,会持续更新前端相关的知识和学习笔记,一起学习。

JavaScript中的数据类型分为基本数据类型和引用数据类型,那么哪些是基本类型,哪些是引用类型,以及它们的区别是什么呢?

基本数据类型

基本数据类型共有6种,包括String、Number、Boolean、Null、undefined以及ES6新增的Symbol

引用数据类型

引用数据类型就是除基本数据类型外的数据,即Object对象类型Array、Function、RegExp、Date都是对象类型。

基本数据类型与引用数据类型的区别

认识了基本数据类型与引用数据类型,那么它们之间有什么区别呢?

基本数据类型存储在栈(Stack)内存中,引用数据类型存储在堆(Heap)内存中。

基本数据类型存放在栈中,是一段简单的数据段,数据大小确定,内存空间大小可以分配,是直接按值存放的,可以按值访问

引用数据类型存放在堆中,变量在栈中保存的是指向堆内存的地址值,这个地址值指向对应的对象类型,访问堆内存中的对象是通过地址值访问的。

下图表示基本类型和引用类型在内存中的存放位置,以及嵌套的数据类型的地址指向。

其中变量 a 和变量 b 保存的都是基本数据类型,foo 与 Foo 保存的都是引用数据类型,Foo 对象中还包含嵌套的数据类型。访问对象类型时,需要通过 obj.xxx 访问,即访问 Foo 内的 nx 时,需要通过 Foo.nFoo.n.x 访问,并且对象嵌套对象时,变量中不存在对 n 和 x 的直接引用,必须通过Foo.n 和 Foo.n.x 才能访问到嵌套的对象。

理解了上面的内容,那么对下面数据类型的赋值也会有一个清晰的认识。

// 基本数据类型的赋值var a = 10;var b = a; b = 20; // a和b的值分别为多少?console.log(a,b); // 10 20 // 引用数据类型的赋值var foo = { c: 30 };var Foo = foo;Foo.c = 40; // foo内的c与Foo内的c的值分别为多少?console.log(foo.c, Foo.c) // 40 40 

在上面,我们知道了基本类型和引用类型在内存中的存放位置,那么我们这两个问题也会迎刃而解。

首先a是基本数据类型,存放在栈内存中,当把a的值赋给b时,即 b = 10,这时a和b在栈内存中保存的值相同,但这两个变量相互独立,改变b的值并不会影响a原本的值,因此a=10,b=20。

而foo属于引用数据类型,在栈内存中存放的是指向堆内存对象的地址值,赋值时把foo的地址值给了Foo,这时这两个变量指向同一个对象,改变Foo中c的值,foo中c的值也会改变。

JS基本数据类型与引用数据类型相关推荐

  1. ie9无法获取未定义或 null 引用的属性“indexof”_前端JS基础篇(二)JS基本数据类型和引用数据类型及检测数据类型方法...

    JS中的数据类型 (一).基本数据类型(值类型) 1.number:数字 -12.12.5.-12.5 0这些数字都是number: js中增加了一个number类型的数据:'NaN' typeof ...

  2. JS中的基本数据类型与引用数据类型

    JS中的数据类型可以这样分类: 原始数据类型: number, string ,boolean, undefined, null, symbol 基本类型(简单类型): 值类型: number((整数 ...

  3. js基本数据类型和引用数据类型有什么区别?

    js基本数据类型和引用数据类型有什么区别? 1.基本数据类型和引用数据类型包括哪些? 基本数据类型: 在javascript中,有6种基本数据类型:string.number.boolean.null ...

  4. 浅谈js基本数据类型与引用数据类型的引用

    ES变量有两种不同的数据类型:基本数据类型和引用数据类型. 基本数据类型 基本数据类型有:undefined,boolean,number,string,null. 基本数据类型的访问是按值访问的,换 ...

  5. JavaScript中的基本数据类型与引用数据类型

    JavaScript中的基本数据类型与引用数据类型 转载自:https://www.cnblogs.com/c2016c/articles/9328725.html 1.栈(stack)和堆(heap ...

  6. ES6 深拷贝_JS基本数据类型和引用数据类型的区别及深浅拷贝

    1.栈(stack)和堆(heap) stack为自动分配的内存空间,它由系统自动释放:而heap则是动态分配的内存,大小也不一定会自动释放 2.数据类型 JS分两种数据类型: 基本数据类型:Numb ...

  7. 【C++ 语言】引用数据类型 ( 引用数据类型定义 | 引用数据类型使用 | 引用类型参数 )

    文章目录 引用类型 引用类型 引用数据类型 : 1. 引用数据类型定义 : 类型名称& 变量名 = 对应类型变量名称 ; //① 定义 普通 类型 变量int a = 8;//② 定义 引用类 ...

  8. JAVA基本数据类型和引用数据类型的参数传递详解

    今天动力节点java培训机构小编为大家介绍 JAVA基本数据类型和引用数据类型的参数传递,希望通过此文大家能够熟悉JAVA基本数据类型和引用数据类型的参数传递,下面就随小编一起来了解一下JAVA基本数 ...

  9. JavaScript的数据类型、null 和undefined、原始数据类型和引用数据类型等JavaScript基础知识总结

    一.JavaScript里有哪些数据类型,解释清楚null 和undefined,解释清楚原始数据类型和引用数据类型.比如讲一下1 和Number(1)的区别 数据类型: undefined,没有定义 ...

最新文章

  1. Python 技术篇-打开指定文件夹、目录、路径方法,运行指定文件演示
  2. Scrum 项目1.0 2.0 3.0 4.0 5.0 6.0 7.0
  3. pdf阅读器改背景色
  4. Linux容器能否弥补IoT的安全短板?
  5. springboot 监听所有异常_SpringBoot——目前Java开发最流行的框架(一)
  6. mac os android连接wifi密码,Mac使用小技巧:找回WiFi密码
  7. linux可执行文件bad interpreter解决方法
  8. window 装oracle,在Window下安装Oracle
  9. java中怎么实现大小写转换(利用阿斯克码)
  10. 安卓机顶盒运行linux,全志 Allwinner A20 机顶盒刷入原生 Debian
  11. cpu压力测试 Android,测试CPU和GPU性能压力(StressMyPC)
  12. Bitdefender 发布GandCrab V5.2勒索病毒解密工具
  13. STM32中断编程步骤
  14. mysql新闻管理系统表_《新闻管理系统》数据库设计_参考答案.doc
  15. Project Management-软件开发之项目管理
  16. shell加密工具shc的安装
  17. 老罗如果输了整个民族都输了
  18. 【转】论文阅读理解 - Panoptic Segmentation 全景分割
  19. python获取元素在数组中的位置
  20. 写不出好的策划方案?大神手把手教你写策划

热门文章

  1. 1.项目体系架构设计(电商推荐系统)
  2. 使用ID3算法构造决策树——python
  3. 怎么将照片格式转换jpg?这两个图片格式转换方法一看就会
  4. win10android文件传输,win10电脑如何发送文件到安卓手机?win10电脑发送文件到安卓手机的方法...
  5. 基于UNet网络实现的人像分割 | 附数据集
  6. 龙格-库塔法 wiki
  7. C++字符数组赋值问题(1)
  8. 1.C语言基础-给字符数组赋值
  9. 结构体 + 联合体 + 位域 使用
  10. 解决串口猎人软件Component ‘anigif.OCx‘ or one of its dependencies not correctly registered: a file is miss