Javascript中的基本类型和引用类型概述说明
作者:@乐知者@ 发布时间:2024-04-18 09:37:04
标签:JS,基本类型,引用类型
简单概述
js变量可以划分为两种不同的数据类型:
基本类型:undefined、null、Boolean、Number、String、Symbol(ES6)
引用类型:除基本类型以外,也可以理解为对象,如:Object、Array、RegExp、Date、Function等
类型的区别在于:
基本类型 | 引用类型 | |
---|---|---|
可变性 | 不可变 | 可变 |
存储区 | 栈区 | 栈区和堆区 |
访问 | 按值访问 | 按引用访问 |
两者比较 | 值的比较 | 引用的比较 |
详细说明
值的可变性
基本类型(以string类型为例):
let person = '小明';
person.age = 18;
console.log(person.age); // undefined
引用类型值(原始值)可添加属性和方法:
let person = { name: '小落子' };
person.age = 18;
person.addAge = function() {
person.age2 = person.age + 1;
}
person.addAge();
console.log(person.age, person.age2); // 18 19
这样就说明了,基本类型的值是不可变的,而引用类型的值是可变的
存储
基本类型存储结构:
栈区 | 栈区 |
---|---|
name | 小红 |
age | 18 |
基本类型的变量存放在栈区(栈区指内存里的栈内存,stack)
栈区保存了变量的标识和变量的值
引用类型存储结构:
引用类型的存储需要内存的栈区和堆区共同完成(堆区指内存里的堆内存,heap)
栈区保存了变量的标识符和指向堆内存中该对象的指针(该对象在堆内存的地址),堆区保存了实际的对象
访问/比较
// 基本类型,以string为例
let a = '[]', b = '[]';
console.log(a === b); // true
// 引用类型
let c = [], d = [];
console.log(c === d); // false
基本类型的访问是按值访问的;引用类型是按**引用(地址)**访问的
基本类型比较的是值,所以相同,就为 true;引用类型比较是两个对象堆内存地址是否相同,虽然变量c和变量d都是一个空数组,但是它们的堆内存地址不是一样的,地址指向的不是同一个数组对象,所以不相等。
经常遇到的问题
关于基本类型和引用类型,不管是面试中,还是平常使用中,经常遇到的问题便是克隆(复制),这里又引出另一个概念(深克隆和浅克隆,对于基本类型是没什么影响的)
浅克隆:复制引用类型时,不仅复制,而且还把内存地址也复制了一遍;修改其中一个,另一个会跟着变化
深克隆:复制,内存地址不同;修改其中一个,另一个不会相应的改变
来源:https://blog.csdn.net/weixin_45663702/article/details/126157239


猜你喜欢
- 项目地址这个项目很神奇,直接将node.js项目打包成windows可以直接执行的exe文件(也支持FreeBSD、linux、macos、
- 本文实例讲述了C#操作SQLite数据库帮助类。分享给大家供大家参考,具体如下:最近有WPF做客户端,需要离线操作存储数据,在项目中考虑使用
- 列表(元组)基本操作符回顾len()函数在列表与元组上的使用示例如下:names = ['Neo', 'Lily
- MySQL行转列操作 所谓的行转列操作,就是将一个表的行信息转化为列信息,说着可能比较笼统,这里先举个例
- 举例: 340%60 = 40 ,怎么来的?340 - 60*5 = 40340 - (比340小的那个可以被60整除的正整数) =. 40
- 本文实例分析了php中get_meta_tags()、CURL与user-agent用法。分享给大家供大家参考。具体分析如下:get_met
- 最近遇到一个现象,将做好的软件放在更高分辨率的电脑上运行,会导致字体显示不完全,出现被控件遮挡的情况。具体原因可以上网查询,在这里将记录下解
- 由于GIL(Global Interpreter Lock)的存在使得在同一时刻Python进程只能使用CPU的一个核心,也就是对应操作系统
- 如何限制重复订阅邮件或投票?一、准备子程序和函数。1、初始化数据,在Session对象中保存两个变量:Sub InitializeFID()
- 安全等于运算符(<=>)这个操作符和=操作符执行相同的比较操作,不过<=>可以用来判断NULL值。在两个操作数均为N
- 本文实例为大家分享了python3.5 email发送邮件的具体代码,供大家参考,具体内容如下直接套用代码即可from email.mime
- 利用Python + wxpy 可以快速的查询自己好友的地区分布情况,以及好友的性别分布数量。还可以批量下载好友的头像,拼接成大图。本次教程
- PDO::getAvailableDriversPDO::getAvailableDrivers — 返回一个可用驱动的数组(PHP 5 &
- 参考官网地址:Windows端:https://tensorflow.google.cn/install/source_windowsCPU
- 上传控件基础知识说明:上传控件(<input type="file"/>)用于在客户端浏览并上传文件,用户选
- 在数据库查询的时候,我们有时有这样的需求,就是要找出数据表里指定范围行内的数据记录,比如说要找出数据表里第10行到第20行的这10条数据,那
- Instr函数与InstrRev函数大家都应该很熟悉,但是如果你看过《ASP * 站开发实践教程》,你应该注意一下。该书中介绍它们时是很有迷
- 我们提倡尽可能使用CSS,而且我们常常能做到这一点。现代浏览器有很好的CSS支持-这无疑足够好让你使用CSS来控制布局和版面设计。但是有时候
- 一、使用安装pip install mitmproxymitmproxy 是具有控制台界面的交互式,支持SSL的拦截代理mitmdump是m
- 在利用DL解决图像问题时,影响训练效率最大的有时候是GPU,有时候也可能是CPU和你的磁盘。很多设计不当的任务,在训练神经网络的时候,大部分