JavaScript 中的七种基本数据类型

文章目录

在JavaScript中,有七种基本数据类型。这些数据类型是构建所有其他复杂数据结构和对象的基础

一、字符串 (String)

字符串用于表示文本数据。它可以包含在单引号(')或双引号(")中。例如:"Hello, World!"。

javascript 复制代码
let message = "Hello, World!";

二、数字 (Number)

2.1 整数与浮点数

JavaScript中的数字类型包括整数和浮点数。整数是不带小数点的数字,而浮点数则包含小数部分

javascript 复制代码
let integerNumber = 42;
let floatingPointNumber = 3.14;

2.2 安全整数

在javaScript中涉及安全整数,即仅能安全地存储在 -(2^53 − 1)(Number.MIN_SAFE_INTEGER)到 2^53 − 1(Number.MAX_SAFE_INTEGER)

javascript 复制代码
console.log(Number.MIN_SAFE_INTEGER);  //-9007199254740991
console.log(Number.MAX_SAFE_INTEGER);   //9007199254740991

超过安全整数就可能发生误差问题。

javascript 复制代码
//下面两个的数值相等
console.log(9007199254740991 + 1);    //9007199254740992
console.log(9007199254740991 + 2);    //9007199254740992

那如果碰到一个大数据,除了手动和2^53 − 1(Number.MAX_SAFE_INTEGER)运算之外,如何检查一个数是否在安全的整数范围内呢,可以用到Number.isSafeInteger()检验

javascript 复制代码
console.log(Number.isSafeInteger(9007199254740991 + 1));   //false

2.3 特殊值

Number 类型是一种基于 IEEE 754 标准的双精度 64 位二进制格式的值。它能够存储 2^1074(Number.MIN_VALUE)和 2^1024(Number.MAX_VALUE)之间的正浮点数,以及 -2^1074 和 -2^1024 之间的负浮点数.超出便会自动转换

  • 大于 Number.MAX_VALUE 的正值被转换为 +Infinity。
  • 小于 Number.MIN_VALUE 的正值被转换为 +0。
  • 小于 -Number.MAX_VALUE 的负值被转换为 -Infinity。
  • 大于 -Number.MIN_VALUE 的负值被转换为 -0
javascript 复制代码
console.log(0 / 0); // 输出: NaN
console.log(1 / 0); // 输出: Infinity
console.log(-1 / 0); // 输出: -Infinity

2.4 浮点数问题

在 JavaScript 中进行精确的浮点数比较可能会出现意料之外的结果,这是由于浮点数舍入误差的原因。为了避免这种问题,可以使用像toFixed()这样的方法来限制小数位数。

javascript 复制代码
let a = 0.1;
let b = 0.2;
let result = a + b;
console.log(result); // 可能输出: 0.30000000000000004

那具体产生误差的原因是什么呢?

具体可以参照这篇博客JS浮点数精度问题及解决方案

2.5 进制数据

我们常写的数据是十进制数据。那二进制,八进制等这些数据JavaScript是否可以表示呢。答案是肯定的

  • 16进制的数据,0x开头
  • 8进制的数据,0o开头
  • 2进制的数据,0b开头
javascript 复制代码
console.log(0x10);   //16
console.log(0o1);   //1
console.log(0b1);   //1

2.6 NaN

NaN("Not a Number")是一个特殊种类的数值,当算术运算的结果不表示数值时,通常会遇到它。它也是 JavaScript 中唯一不等于自身的值。

javascript 复制代码
console.log(typeof NaN); //number
console.log(NaN === NaN); //false

三、 布尔值 (Boolean)

布尔值用于表示逻辑值 true 或 false。它经常用于控制流程和条件判断

javascript 复制代码
let a= true;
let b= false;

四、空值 (Null)

null表示一个空对象。当要明确表示变量为空时,可以赋予它 null 值

null与false、0、''、undefined、NaN都是虚值。如果在条件语句中遇到虚值,那么 JS 将把虚值强制转为false。

null 也称为早期JavaScript 实现的一个错误。

javascript 复制代码
console.log(typeof null); //'object'

五、未定义 (Undefined)

当我们不清楚变量之后的值具体为什么,这时候我们可以赋其值为 undefined。

5.1 null 和 undefined区别

  • 使用方式的区别:声明但未定义(即不知道该变量之后的值具体类型)可以用undefined。但如果很确信该变量值之后是一个对象,这时我们可以先赋值为null。

  • typeof类型不同:undefined的类型是undefined;null类型是object

  • 和数值运算值不同:undefined和数值运算值为NaN;null为转换为0

六、 Symbol

Symbol 是 ECMAScript 6 新增的数据类型,用于创建唯一的标识符。它通常用于对象属性的唯一键

javascript 复制代码
console.log(typeof Symbol("a")); //symbol
console.log(Symbol("a") == Symbol("a")); //false

在实际开发中,Symbol经常用于以下场景:

  • 私有属性/方法: 使用Symbol作为对象属性名,可以模拟私有属性和方法,因为Symbol属性不会出现在对象的枚举属性中。
  • 定义常量: 在大型项目中,可以使用Symbol定义全局常量,以避免命名冲突和意外修改。

七、BigInt

BigInt存储和操作大整数。表示大于 2^53 - 1 的整数

javascript 复制代码
console.log(9007199254740991n + 1n);   //9007199254740992n
console.log(9007199254740991n + 2n);   //9007199254740993n

用BigInt操作数据会存在一些问题,如操作符结果会向零取整,和Number 不是严格相等的等等。所以在真正遇到大数据时,还是建议使用相关的库来进行保存和运算。

八、总结

类型 typeof 返回值 对象包装器
Null "object" 不适用
Undefined "undefined" 不适用
Boolean "boolean" Boolean
Number "number" Number
BigInt "bigint" BigInt
String "string" String
Symbol "symbol" Symbol
相关推荐
青 春 记 忆1 分钟前
零基础入门python04:用注册校验理解字典、集合和条件判断
开发语言·vscode·python·python3.11
kels88995 分钟前
实战排坑:黄金实时API开发,XAUUSD Tick报文异常处理实践
开发语言·python·websocket·网络协议·信息可视化
阿pin9 分钟前
Java随笔-JDK7 HashMap头插法为何能导致死循环?
java·开发语言·hashmap
FBI HackerHarry浩12 分钟前
Pandas 库中用于分类变量独热编码(One-Hot Encoding)的函数 pd.get_dummies() 函数
开发语言·人工智能·python·pandas
BD_Marathon26 分钟前
部署Spark
大数据·javascript·spark
名字还没想好☜27 分钟前
Go 的 sync.Cond 实战:用条件变量做等待/通知,比忙轮询省 CPU
开发语言·数据库·后端·golang·go
gis开发之家1 小时前
《Vue3 从入门到大神50篇》Vue3 源码详解(二十):生命周期钩子源码解析 —— onMounted / onUpdated 如何实现?
前端·javascript·前端框架·vue3·vue3源码
全栈项目管理程序猿1 小时前
ArcGIS JS 基础教程(9):天空盒与大气效果
javascript
平凡的阿泽1 小时前
我用TRAE Work手搓了一个「谁是卧底」小游戏
前端·javascript
Highcharts1 小时前
Highcharts 实战:基于 Gauge 仪表盘打造实时动态时钟可视化开发全解析
javascript·数据可视化