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 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
三十而立洋1 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
伞伞悦读1 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
卡布鲁1 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
C语言小火车2 天前
C/C++ 为什么需要编译器?
开发语言·c++
李少兄2 天前
JavaScript 隐式全局变量解析
javascript
霍霍的袁2 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
孙启超2 天前
【AI开发之Rust】第 11 课:智能指针与内部可变性
开发语言·后端·rust
此生决int2 天前
深入理解C++系列(20)——C++11(下)
开发语言·c++
沙蒿同学2 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端