前端数据类型大全及其区别总结

前端数据类型大全及其区别总结

  • 基本数据类型
  • 引用数据类型
  • Null 与 Undefined 的区别
  • Map 与 Object 的区别
  • Set 与 Array 的区别
  • WeekMap 与 Map 的区别
  • WeekSet 与 Set 的区别

基本数据类型

  • Number(数值类型),用于表示数字,包括整数和浮点数。
  • String(字符串类型),用于表示文本,由字符组成,可以使用单引号、双引号或反引号表示。
  • Boolean(布尔类型),表示逻辑值,只有truefalse两个值。
  • Null,表示空的对象引用。
  • Undefined,表示未定义的变量或属性。
  • SymbolES6引入),表示唯一的标识符。
  • BigIntES10引入),用于表示大整数,解决JavaScript中Number类型表示大整数的限制。

引用数据类型

  • Object(对象),由键值对组成,可以包含多个属性和方法。
  • Array(数组),由元素组成的列表,元素可以是任意类型的数据。
  • Function(函数),作为第一类对象,可以在程序中作为参数传递或定义其他函数。
  • Date(日期对象),用于处理日期和时间。
  • MapSet等,用于存储键值对或唯一元素的集合。
  • WeakMapWeakSetES6引入),WeakSet主要用于临时存储对象的集合,以便在不需要时自动释放内存;WeakMap主要用于保存对象的附加数据,可以避免内存泄露的问题。

Null 与 Undefined 的区别

  1. 意义不同
    • null 表示一个值被定义了,定义为“空值”
    • undefined 表示根本不存在
  2. 转换结果不同:undefined转数值为NaNnull转数值为0
  3. 数据类型不同

Map 与 Object 的区别

  • 相同点
    二者都是以key-value形式对数据存储
  • 不同点
    1. key的数据类型范围不同

      • Object可以作为key的有String,Number,symbol
      • Map:目前js的数据类型都可以作为key
    2. key的顺序不同

      • Object:如果对象的key中同时存在String,Number,Symbol,通过Object,keys得到的顺序是Number(升序)–>String(symbol)(以创建的顺序)
      • Mapkey按声明的顺序进行排序
    3. 创建方式不同

      • 创建 Object 实例
        const obj1=new Object()
        const obj2={}
        const obj3=Object.create({})
        
      • 创建 Map 实例
        const map=new Map()
        
    4. key值调用的方式不同

      • 通过key取值:

        Object:可通过 . 或 []
        Map:只能用原生的get方法进行调用;

      • 判断是否有某个属性

        Object: 'a' in obj;判断obj中是否有a这个属性;
        Map: map.has('a');判断map中是否有a这个属性;

    5. 设置属性的方式不同

      • Object设置属性:

        obj.a = 1;
        obj[‘a’] = 1;

      • Map设置属性:

        Map类型中js目前存在的数据类型均可以作为key;
        map.set(‘a’,1)

    6. 删除key的方式不同

      Object删除属性: 自身没有删除属性的方法;一般删除对象属性的方式:
      delete obj.a
      Map删除属性:
      map.delete('a') ----删除a属性;
      map.clear() ----删除所有的属性;

    7. 获取size

      Object: 通过Object.keys(obj) 返回一个数组,通过获取数组的长度来获取size;
      Map: 自身带有size属性:map.sizesize属性无法修改;

    8. 迭代
      Map: 拥有迭代器,可以通过for-of forEach去直接迭代元素,遍历顺序是确定的
      Object: 并没有实现迭代器,需要自行实现,不实现只能通过for-in循环去迭代,遍历顺序是不确定的

      判断一个数据是否可以迭代可通过以下方式:

      	typeof [][Symbol.iterator] //functiontypeof new Map()[Symbol.iterator] //functiontypeof {}[Symbol.iterator] //undefinedtypeof 1[Symbol.iterator] //undefined
      
    9. JSON操作
      Object: 支持JSON.stringify和JSON.parse的操作;
      Map: 不支持;

    10. this不同

      	const f = function(){ console.log(this) }Object:const obj = {fn:f}Map:const map = new Map()map.set('fn',f)obj.fn() //指向objmap.get('fn')() //取决于函数的调用者;
      

Set 与 Array 的区别

  1. 初始化方式不同:
    • Set使用new Set()初始化
    • Array使用[]或new Array()初始化。
  2. 存储数据重复性:
    • Array存储重复的数据
    • Set只能存储唯一的值(不允许重复)。
  3. 长度和成员管理方式不同:
    • Array的长度可以动态变化,可以通过索引访问和修改元素
    • Set的长度是固定的,且成员都是唯一的,不能通过索引访问或修改。
  4. 方法和属性不同:
    • Array有许多方法如push(), .pop(), .splice()
    • Set只有一些基本的方法如add(), .delete(), .has()等。

WeekMap 与 Map 的区别

  1. MapWeakMap 都属于 ES6 中新增的数据类型,用于存储键值对。
  2. Map 是一个普通的键值对集合,可以使用任何类型的值作为键或值,包括基本类型和对象。而 WeakMap 的键必须是对象,值可以是任何类型。
  3. Map 中的键值对是强引用关系,即只要 Map 中的键或值存在,Map 对象就会一直保留这个键值对,不会被垃圾回收。而 WeakMap 中的键值对是弱引用关系,如果 WeakMap 的键不再被引用,那么这个键值对就会被自动删除。
  4. 由于 WeakMap 中的键是弱引用,所以 WeakMap 对象的 size 属性无法访问,也无法使用 forEach() 和 clear() 等方法。
  5. WeakMap 对象的主要应用场景是需要与另外一个对象关联,并且不想影响到这个对象的垃圾回收机制,以避免内存泄漏。例如,将对象存储在 WeakMap 中,可以确保这个对象只在其他地方仍然被引用时才被保留,否则会自动被删除,从而避免内存泄漏。

WeekSet 与 Set 的区别

  1. WeekSet的只能存储引用类型的值,不能存放普通类型的值;Set都可以
  2. WeekSet里的值都是弱引用,垃圾回收机制运行前后,Set内成员数量可能不一样,只要没有其他(不考虑WeekSet)变量或属性引用,这个对象就会被垃圾回收
  3. WeekSet不能够被遍历,也无法获取全部成员

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS基础:table的4个标签的样式详解(6000字长文!附案例)

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 Web 开发工具合…

记一次中间件宕机以后持续请求导致应用OOM的排查思路(server.max-http-header-size属性配置不当的严重后果)

一、背景 最近有一次在系统并发比较高的时候,数据库突然发生了故障,导致大量请求失败,在数据库宕机不久,通过应用日志可以看到系统发生了OOM。 二、排查 初次看到这个现象的时候,我还是有点懵逼的,数据库…

项目二:学会使用python爬虫请求库(小白入门级)

上一章已经了解python爬虫的基本知识,这一次让我们一起来学会如何使用python请求库爬取目标网站的信息。当然这次爬虫之旅相信我能给你带来不一样的体验。 目录 一、安装requests 库 简介 安装 步骤 1.requests的基本使用3步骤 2.查看所使用编码 3.设置编码…

Redis中BitMap在钉钉机器人中的应用

性能分析 数据库中有1000w用户,每个用户签到一次,对应两个字段 连续签到多少次 、签到时间。 签到时间字段占用10个字节,连续签到多少天 占用5个字节(假设一个用户能活100年,每天都签到,一个用户最多签到3…

前端框架技术革新历程:从原生DOM操作、数据双向绑定到虚拟DOM等框架原理深度解析,Web开发与用户体验的共赢

前端的发展与前端框架的发展相辅相成,形成了相互驱动、共同演进的关系。前端技术的进步不仅催生了前端框架的产生,也为其发展提供了源源不断的动力。 前端的发展 前端,即Web前端,是指在创建Web应用程序或网站过程中负责用户界面…

python对大乐透分析及预测

大乐透是一种基于概率的彩票游戏,其中每个号码的出现都是随机的、独立的,并且不受以前的结果影响。因此,使用Python对大乐透进行精确的分析和预测是极具挑战性的,因为彩票本质上是一个随机过程,不受任何可预测的模式或…

使用Azure AI Search和LlamaIndex构建高级RAG应用

RAG 是一种将公司信息合并到基于大型语言模型 (LLM) 的应用程序中的常用方法。借助 RAG,AI 应用程序可以近乎实时地访问最新信息,团队可以保持对其数据的控制。 在 RAG 中,您可以评估和修改各个阶段以改进结果&#x…

详解Qt中的JSON操作

JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其简洁的结构、易读性以及与多种编程语言的良好兼容性,在现代Web服务、API交互以及数据持久化场景中得到了广泛应用。Qt作为一款功能强大的跨平台应用开发框架&a…

2024年思维100春季线上赛今天开赛,来做历年真题700道感受下难度

今天是2024年4月20日,下午13点开始2024年春季思维100活动第一阶段的线上比赛就按年级正式开始了,先祝愿所有的参赛选手考出好成绩! 这次没有参赛的孩子们也可以来做做历年的思维100真题,看看思维100考什么、怎么考、难度怎么样。如…

ProgressFlowmon的confluence接口存在任意命令执行漏洞(CVE-2024-2389)

声明: 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 简介 ProgressFlowmon是一整套用于网络映射、应用程序性能…

C++ | Leetcode C++题解之第29题两数相除

题目: 题解: class Solution { public:int divide(int dividend, int divisor) {// 考虑被除数为最小值的情况if (dividend INT_MIN) {if (divisor 1) {return INT_MIN;}if (divisor -1) {return INT_MAX;}}// 考虑除数为最小值的情况if (divisor I…

【计算机组成原理】运算方法和运算器

数据与文字的表示方法 1. 数据格式1.1 定点数表示方法1.1.1 定点小数1.1.2 定点整数 1.2 浮点数表示方法1.2.1 浮点数表示1.2.2 浮点数的规格化1.2.2.1 尾数为原码表示的规格化1.2.2.2 尾数为补码表示的规格化 1.2.3 IEEE754标准⭐ 1.3 十进制数串的表示方法1.3.1 字符串形式1.…

【LeetCode热题100】【动态规划】乘积最大子数组

题目链接:152. 乘积最大子数组 - 力扣(LeetCode) 要找乘积最大的连续子数组,我们之前做过找和最大的连续子数组【LeetCode热题100】【普通数组】最大子数组和-CSDN博客 对于和来讲,定义dp[i]是以nums[i]为结尾的最大…

Tensorflow2.0笔记 - 使用卷积神经网络层做CIFA100数据集训练(类VGG13)

本笔记记录CNN做CIFAR100数据集的训练相关内容,代码中使用了类似VGG13的网络结构,做了两个Sequetial(CNN和全连接层),没有用Flatten层而是用reshape操作做CNN和全连接层的中转操作。由于网络层次较深,参数量…

centos搭建yum源

目录 1.createrepo简介 2.repo搭建思路 3.安装 4.使用 1.createrepo简介 createrepo 是一个用于创建 RPM 包的工具,它可以帮助你创建一个本地的 YUM 仓库。createrepo 并不是用于运行 YUM 仓库服务的软件,而是用来生成仓库的元数据,使得…

区分软件成熟度模型集成的五个等级

概念讲解 软件成熟度模型集成(CMMI,Capability Maturity Model Integration)是一种评估和改进软件开发过程的模型。CMMI的五个成熟度等级分别是: 初始级(Level 1 - Initial):在这个等级&#x…

【Taro3踩坑日记】找不到sass的类型定义文件

问题截图如下:找不到sass的类型定义文件 解决办法: 1、npm i types/sass1.43.1 2、然后配置 TypeScript 编译选项:确保 TypeScript 编译器能够识别 Sass 文件,并正确处理它们。

在一个态势感知复杂网络系统中,存在着态、势、感、知四种损失函数和梯度变化...

反向传播是一种用于训练神经网络的常用技术,它通过计算损失函数对网络参数的梯度,然后利用梯度下降等优化算法来更新参数,从而使网络逐步优化以减少损失函数的值。 在反向传播中,损失函数的选择非常重要,通常采用的损失…

PyTorch的核心概念

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

AWS账号注册以及Claude 3 模型使用教程!

哈喽哈喽大家好呀,伙伴们!你听说了吗?最近AWS托管了大热模型:Claude 3 Opus!想要一探究竟吗?那就赶紧来注册AWS账号吧!别担心,现在注册还免费呢!而且在AWS上还有更多的大…