当前位置: 首页 > news >正文

Javascript的数据类型

Javascript的数据类型

  • 1.基本数据类型
    • 1.1七种基本数据类型
    • 1.2单独说说BigInt‌
    • 1.3其它注意点
  • 2.引用数据类型
  • 3.基本数据类型和引用数据类型的区别
  • 4.双等于号和三等于号的区别
  • 5.Javascript的类型转换机制
    • 5.1显示转换(强制转换)
    • 5.2隐式转换
      • (1)减、乘、除
      • (2)加(加法要区别算,因为+不仅仅是加法,还可以拼接)
      • (3)单个变量
      • (4)ToPrimitive原则

‌JavaScript主要有两种类型:基本数据类型和复杂数据类型‌(引用数据类型)。

1.基本数据类型

1.1七种基本数据类型

  • Boolean‌:表示逻辑值,只有两个值:true 和 false。
  • Number‌:表示数值,可以是整数或浮点数。‌
  • String‌:表示文本数据,用引号括起来。
  • ‌Undefined‌:表示未定义的值。‌
  • Null‌:表示空值,通常用于表示对象不存在或没有初始化。‌
  • Symbol‌(ES6 引入):一种唯一的、不可变的数据类型,通常用于作为对象属性的标识符。‌
  • BigInt‌(ES6 引入):表示大整数,用于处理超出普通数字范围的值。

1.2单独说说BigInt‌

在 JavaScript 中,最大的安全整数是 2 的 53 次方减 1,即 Number.MAX_SAFE_INTEGER,其值为 9007199254740991。这是因为 JavaScript 中使用双精度浮点数表示数字,双精度浮点数的符号位占 1 位,指数位占 11 位,尾数位占 52 位,因此能够准确表示的整数范围是有限的。超过这个范围的整数可能会失去精度。

//超过了2**53-1后精度会缺失
console.log(2 ** 53 - 1); //9007199254740991
console.log(Number.MAX_SAFE_INTEGER); //9007199254740991
console.log(2 ** 53); //9007199254740992
console.log(2 ** 53 + 1); //9007199254740992
console.log(2 ** 53 + 2); //9007199254740994
console.log(2 ** 53 + 3); //9007199254740996
console.log(2 ** 53 + 4); //9007199254740996

在这里插入图片描述
BigInt 是 JavaScript 中引入的一种新的数据类型,用于表示任意精度的整数。与普通的数字类型不同,BigInt 可以表示超出 Number.MAX_SAFE_INTEGER 的整数值,因此它可以用于处理非常大的整数,而不会丢失精度。

要创建 BigInt,可以在整数值后面添加 n 或调用 BigInt() 函数并将整数作为参数传递。

console.log(5648941287894651132156549781132n);
console.log(BigInt("5648941287894651132156549781132"));

在这里插入图片描述
Biglnt不能和普通的数字进行混合运算,只能使用Biglnt类型进行运算。

console.log(10000n + 10000n); //20000n
console.log(45612316546871512315645487n * 312121100n); //14236566414157737982622816612475700n
console.log(45612316546871512315645487 * 312121100n);//报错

比较运算符:

console.log(20n > 15); //true
console.log(20n === 20); //===不会做强制类型转换,false
console.log(typeof 20n); //类型为bigint
console.log(20n == "20"); //==不会严格比较,true

1.3其它注意点

console.log(typeof NaN); //number
console.log(typeof null); //object
console.log(undefined == null); //true
console.log(undefined === null); //false

2.引用数据类型

  • Object
  • Array
  • Function
  • RegExp
  • Date
  • Map
  • Set

3.基本数据类型和引用数据类型的区别

基本数据类型和引用数据类型本质的不同是存储上的区别

基本数据类型的值直接存储在栈内存中,值与值之间独立存在,修改一个变量不会影响到其他变量。对象(引用数据类型)是保存在堆内存中的,每创建一个新对象,就会在堆内存中开辟出一个新空间,变量保存的是对象的内存地址(对象的引用)如果两个变量保存的是同一个对象引用,当其中一个通过变量修改属性时,另一个也会受到影响‌。(很多地方都碰到过这种情况)

4.双等于号和三等于号的区别

=== 判断两边数据是否全等,即数据类型与值均相等。而 == 只判断是否相等。

5.Javascript的类型转换机制

5.1显示转换(强制转换)

  • Number()
  • parseInt()
  • Boolean()
  • String()

5.2隐式转换

当运算符两端的数据类型不一致,会触发隐式转换。

(1)减、乘、除

在对非Number 类型运用数学运算符(-*/)时,会先将非 Number 类型转换为 Number 类型再进行计算。示例如下:

console.log('a'-'b')//NaN
console.log(3-true)//2
console.log(3-null)//3
console.log(3-undefined)//NaN
console.log(false-null)//0
console.log(function (){}-0)//NaN

注意:在算术运算中,如果操作数中有 undefined,其运算结果是就是 NaNnull 在算术运算中则是隐式转换为数值 0 来参与运算。

(2)加(加法要区别算,因为+不仅仅是加法,还可以拼接)

加法运算遵守以下 3 条规则,优先级从高到低

  • 当一侧为 String 类型,被识别为字符串拼接,并会优先将另一侧转换为字符串类型。
  • 当一侧为 Number 类型,另一侧为原始类型,则将原始类型转换为 Number 类型。
  • 当一侧为 Number 类型,另一侧为引用类型,将引用类型和 Number 类型转换成字符串后拼接。

(3)单个变量

如果只有单个变量,会先将变量转换为 Boolean 值。只有 nullundefined''NaN0false 这几个会被转换为 false,其他的情况都是 true,比如 {} , [] 等。

(4)ToPrimitive原则

ToPrimitive 规则会尝试调用对象的 valueOftoString 方法,将参数转换为原始类型。

当对象类型需要转为原始类型时,它会先查找对象的 valueOf 方法,如果 valueOf 方法返回原始类型的值,则 ToPrimitive 的结果就是这个值,如果 valueOf 不存在或者 valueOf 方法返回的不是原始类型的值,就会尝试调用对象的 toString 方法,也就是会遵循对象的 ToString 规则,然后使用toString 的返回值作为 ToPrimitive 的结果。

  let str = new String(1)  // 通过 new String 创建了一个对象console.log(typeof str)  // objectconsole.log(str.valueOf())  // "1"console.log(typeof str.valueOf())  // stringconst obj = {valueOf() {return 1},toString() {return 2}}console.log(Number(obj))  // 1

注意:如果 valueOftoString 都没有返回原始类型的值,则会抛出异常。

const obj = {valueOf() {return []},toString() {return {}}
}
console.log(Number(obj))  // TypeError: Cannot convert object to primitive value

特殊:

String({})  // [object Object]
Number([])  // 0

String({}) 空对象会先调用 valueOf,但返回的是对象本身 {},不是原始类型,所以会继续调用toString,得到 [object Object]String([object Object]),所以转换后的结果为 [object Object]
Number([]) 空数组会先调用 valueOf,但返回的是数组本身 [],不是原始类型,所以会继续调用toString,得到 '',相当于 Number(''),所以转换后的结果为 0

相关文章:

Javascript的数据类型

Javascript的数据类型 1.基本数据类型1.1七种基本数据类型1.2单独说说BigInt‌1.3其它注意点 2.引用数据类型3.基本数据类型和引用数据类型的区别4.双等于号和三等于号的区别5.Javascript的类型转换机制5.1显示转换(强制转换)5.2隐式转换(1)减、乘、除(2)加(加法要区别算,因为不…...

Day3 25/2/16 SUN

【一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解(马士兵)】https://www.bilibili.com/video/BV13g41157hK?p4&v…...

欧洲分组加密算法之Kasumi

目录 (1)FL函数 (2)FO函数 (3)FI函数 密钥扩展算法 欧洲分组加密算法之Kasumi Kasumi分组密码算法是由欧洲标准机构ETSI(European Telecommunications Standards Institute)下属的安全算法组于1999年设计的,被用于构造A5/3、GEA3、f8和f9算法,参与移动通信系统无线…...

vue使用v-chart的实践心得

开发Vue2和Vue3时,我们常常需要将数据以图表的形式展示给用户,而 V-Chart 作为一个轻量级且易于集成的图表库,是 Vue 开发的首选。这篇文章,我将写一下关于我在使用这方面的心得。 echarts官网:https://echarts.apach…...

Endnote使用笔记——持续更新

(1)如果样式库里没有想要的期刊格式,可以到这个网址进行下载,并放在本地安装Endnote的文件下边的styles文件里: https://endnote.com/downloads/styles/ (2)EndNote导入参考文献时,关…...

Tetragon:一款基于eBPF的运行时环境安全监控工具

关于Tetragon Tetragon是一款基于eBPF的运行时环境安全监控工具,该工具可以帮助广大研究人员检测并应对安全重大事件,例如流程执行事件、系统调用活动、I/O活动(包括网络和文件访问等)。 在 Kubernetes 环境中使用时,…...

CAS单点登录(第7版)23.Webflow 管理

如有疑问,请看视频:CAS单点登录(第7版) Webflow 管理 概述 Webflow定制 CAS 使用 Spring Webflow 对登录和注销协议进行脚本处理。Spring Web Flow 构建在 Spring MVC 之上,并允许实现 Web 应用程序的“流”。流封装…...

word文档中标题的自动编号问题

最近研究了下标题自动编号,记录下来,以备后用。 (1)从编号1开始,如: 1 ------------------------ 标题1 1.1 ------------------- 标题2 1.1.1 ------------------- 标题3 1.1.1.1 ------------------- 标题…...

kkFileView二开之pdf转图片接口

kkFileView二开之Pdf转图片接口 kkFileView二开系列文章:1 kkFileView源码下载及编译2 Pdf转图片接口2.1 背景2.2 分析2.2 接口开发2.2.1 编写Pdf转图片方法2.2.2 编写转换接口 2.3 接口测试2.3.1 Pdf文件准备2.3.2 pdf2Image 3 部署 kkFileView二开系列文章&#x…...

利用亚马逊云科技RDS for SQL Server配置向量数据存储

生成式人工智能(AI)正迎来又一个快速发展期,引起了开发者们的广泛关注。将生成式能力集成到商业服务和解决方案中变得非常重要。当前的生成式AI解决方案是机器学习和深度学习模型逐步进化迭代的结果。从深度学习到生成式AI的质变飞跃主要是由…...

vLLM 部署 DeepSeek 大模型避坑指南

本文基于实战经验,提供从环境准备到性能调优的全流程避坑指南。 一、环境准备:驱动与硬件兼容性 1. NVIDIA 驱动与 CUDA 版本对齐 确保NVIDIA驱动和CUDA版本相互匹配是关键。例如,CUDA 12.x需要至少525.60的驱动版本。 # 使用 nvidia-smi…...

本地部署MindSearch(开源 AI 搜索引擎框架),然后上传到 hugging face的Spaces——L2G6

部署MindSearch到 hugging face Spaces上——L2G6 任务1 在 官方的MindSearch页面 复制Spaces应用到自己的Spaces下,Space 名称中需要包含 MindSearch 关键词,请在必要的步骤以及成功的对话测试结果当中 实现过程如下: 2.1 MindSearch 简…...

【大模型系列】Windows系统上运行大语言模型方式

在Windows系统上运行大语言模型(LLMs)有多种方式,以下是一些具体的方法: GPT4All 简介:GPT4All是一个适用于所有操作系统的LLM框架和聊天机器人应用程序,可以本地运行LLMs,并通过API将其与任何…...

Linux Mem -- Where the mte store and check in the real hardware platform

目录 1 前言 2 MTE tag分类 3 Address tag 4 Memory tag 5 Tag Check 6 Cortex-A710 和 CI-700 系统示例: 1 前言 ARM的MTE允许分配、设置、比较一个 4bit的allocation tag 为16字节粒度的物理地址。当对MTE有一定了解后,应该会产生如下疑问&#…...

连锁企业管理系统的五大核心功能

连锁管理系统对于连锁企业的运营和发展至关重要,以下以核货宝连锁管理系统为例,介绍其五大核心功能: 门店管理功能 门店信息管理:核货宝连锁管理系统可集中管理所有门店的详细信息,包括门店地址、联系方式、营业时间、…...

Docker配置镜像加速-解决黑马商城部署Mysql失败问题

随着 Docker 在容器化应用中的广泛应用,越来越多的开发者选择通过 Docker 来简化开发和部署过程。然而,在使用 Docker 部署应用时,有时会遇到因为镜像下载速度慢或者 MySQL 部署失败等问题,特别是在中国地区,由于网络环…...

Cherno C++ P54 内存:栈与堆

这篇文章我们来谈论一下计算机的内存。在这里,我们着重讨论内存的两个部分:栈与堆。我们需要注意的一点是,这两个概念不是虚拟的,而是在计算机内部真实存在的。它们是我们的CPU当中RAM部分物理上存在的两个区域。我们之所以要重点…...

对项目交接的一些思考

天下大势,分久必合合久必分。这些年交接了很多项目,也从别人那里接手了很多项目。最近又接收了一些项目,但团队接收的效果不是很好,或者说掌握的不全面,所以就在想怎么能够做的更好一些? 团队关系 其实我…...

【PYTORCH】官方的turoria实现中英文翻译

参考 https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html 背景 pytorch官方的是seq2seq是法语到英文,做了一个中文到英文的。 数据集 下载后解压,使用的data\testsets\devset\UNv1.0.devset.zh和UNv1.0.devset.en&#x…...

【算法与数据结构】并查集详解+题目

目录 一,什么是并查集 二,并查集的结构 三,并查集的代码实现 1,并查集的大致结构和初始化 2,find操作 3,Union操作 4,优化 小结: 四,并查集的应用场景 省份…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&&#xff1a;逻辑与 ||&#xff1a;逻辑或 &#xff01;&#xff1a;逻辑非 短路求值 位运算符 按位与&&#xff1a; 按位或 | 按位取反~ …...