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
相关推荐
superman超哥1 分钟前
Rust 异步时间管理核心:Tokio 定时器实现机制深度剖析
开发语言·rust·编程语言·rust异步时间管理核心·tokio定时器实现机制·tokio定时器
朔北之忘 Clancy3 分钟前
2025 年 9 月青少年软编等考 C 语言一级真题解析
c语言·开发语言·c++·学习·数学·青少年编程·题解
林太白3 分钟前
Vite8 Beta来了,Rolldown携手Oxc
前端·javascript·后端
xkxnq5 分钟前
第二阶段:Vue 组件化开发(第 19天)
前端·javascript·vue.js
玛丽莲茼蒿5 分钟前
javaSE 集合框架(五)——java 8新品Stream类
java·开发语言
wjs202410 分钟前
SQLite Glob 子句详解
开发语言
youyicc17 分钟前
Qt连接Pg数据库
开发语言·数据库·qt
量子炒饭大师19 分钟前
【C++入门】Cyber底码作用域的隔离协议——【C++命名空间】(using namespace std的原理)
开发语言·c++·dubbo
froginwe1121 分钟前
PHP 魔术常量
开发语言
古城小栈21 分钟前
Rust 的 validator 库
开发语言·后端·rust