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

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

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

基本数据类型

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

引用数据类型

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

Null 与 Undefined 的区别

  1. 意义不同
    • null 表示一个值被定义了,定义为“空值”
    • undefined 表示根本不存在
  2. 转换结果不同:undefined转数值为NaN,null转数值为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)(以创建的顺序)
      • Map:key按声明的顺序进行排序
    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.size,size属性无法修改;

    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. Map 和 WeakMap 都属于 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.tpcf.cn/web/857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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上还有更多的大…