js【详解】数据类型原理(含变量赋值详解-浅拷贝)

简介: js【详解】数据类型原理(含变量赋值详解-浅拷贝)

JavaScript 中的数据按存储方式的不同,分为值类型和引用类型。

  • 值类型(共 5 种):赋值的时候传值 —— 数字、字符串、布尔值、undefined,Symbol
  • 引用类型 :赋值的时候传引用的地址—— 如对象,数组,null , 函数
  • null 是特殊的引用类型,引用的空地址
  • 函数也是特殊的引用类型,因为函数引用的地址指向的内容不是一个数值,而是一段可执行代码。

声明变量后,js引擎会在栈内存中开辟一个以该变量命名的存储空间,若未赋值,则该空间内存的值类型的数据 undefined。

  • 变量赋值时,若数据为值类型,则会将数据的值存入该变量命名的空间。(即变量中存的数据的值)
  • 存有值类型数据的变量赋值给另一个变量时,会将数据的值复制一份,存入新变量命名的空间中,两个变量内存储的数据相互独立,互不影响(改变A变量的值,B变量的值不会发生改变)
  • 变量赋值时,若数据为引用类型,则会先将引用类型的数据保存在堆内存中,再将该数据在堆内存中存储的地址存入该变量命名的空间。(即变量中存的是数据的引用地址)
  • 存有引用类型数据的变量赋值给另一个变量时,会将数据的引用地址复制一份,存入新变量命名的空间中(浅拷贝),两个变量实际指向的是同一份数据,相互影响(改变A变量的值,B变量的值也会同步改变)

之所以这样设计,是因为引用类型的数据通常较大,拷贝时需要花费更多的时间和空间,引用类型浅拷贝的设计,提升了数据的拷贝速度和内存空间的使用效率,从而表现出了更佳的性能。

目录
相关文章
|
16天前
|
存储 JavaScript 对象存储
js检测数据类型有那些方法
js检测数据类型有那些方法
130 59
|
7天前
|
JavaScript 前端开发
JavaScript如何判断变量undefined
JavaScript如何判断变量undefined
|
1月前
|
JavaScript 前端开发
JavaScript基础知识-变量的声明提前
关于JavaScript变量声明提前特性的基础知识介绍。
31 0
JavaScript基础知识-变量的声明提前
|
9天前
|
存储 前端开发 JavaScript
前端基础(二)_JavaScript变量、JavaScript标识符、JavaScript获取元素、JavaScript的鼠标事件
本文介绍了JavaScript变量的声明和使用、标识符的命名规则、如何获取和操作HTML元素,以及JavaScript的鼠标事件处理,通过示例代码展示了这些基础知识点在实际开发中的应用。
23 2
前端基础(二)_JavaScript变量、JavaScript标识符、JavaScript获取元素、JavaScript的鼠标事件
|
9天前
|
JavaScript 前端开发
js 变量作用域与解构赋值| 22
js 变量作用域与解构赋值| 22
|
9天前
|
存储 前端开发 JavaScript
前端基础(三)_JavaScript数据类型(基本数据类型、复杂数据类型)
本文详细介绍了JavaScript中的数据类型,包括基本数据类型(Number、String、Boolean、Undefined、Null)和复杂数据类型(Object),并解释了如何使用`typeof`操作符来识别变量的数据类型。同时,还讨论了对象、函数和数组等复杂数据类型的使用方式。
13 2
|
12天前
|
前端开发 JavaScript Java
JavaScript的运行原理
JavaScript 的运行原理包括代码输入、解析、编译、执行、内存管理和与浏览器交互几个步骤。当打开网页时,浏览器加载 HTML、CSS 和 JavaScript 文件,并通过 JavaScript 引擎将其解析为抽象语法树(AST)。接着,引擎将 AST 编译成字节码或机器码,并在执行阶段利用事件循环机制处理异步操作,确保单线程的 JavaScript 能够高效运行。同时,JavaScript 引擎还负责内存管理和垃圾回收,以减少内存泄漏。通过与 DOM 的交互,JavaScript 实现了动态网页效果,提供了灵活且高效的开发体验。
|
1月前
|
JavaScript 前端开发
JavaScript基础知识-基本数据类型和引用数据类型
关于JavaScript基础知识的文章,主要介绍了基本数据类型和引用数据类型。
34 2
JavaScript基础知识-基本数据类型和引用数据类型
|
17天前
|
存储 JavaScript 前端开发
[JS] ES Modules的运作原理
【9月更文挑战第16天】ES Modules(ECMAScript Modules)是 JavaScript 中的一种模块化开发规范,适用于浏览器和 Node.js 环境。它通过 `export` 和 `import` 关键字实现模块的导出与导入。模块定义清晰,便于维护和测试。JavaScript 引擎会在执行前进行静态分析,确保模块按需加载,并处理循环依赖。ES Modules 支持静态类型检查,现代浏览器已原生支持,还提供动态导入功能,增强了代码的灵活性和性能。这一规范显著提升了代码的组织和管理效率。
|
2月前
|
缓存 JavaScript 前端开发
[译] Vue.js 内部原理浅析
[译] Vue.js 内部原理浅析