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
相关推荐
Jay_2719 分钟前
python项目如何创建docker环境
开发语言·python·docker
xlsw_26 分钟前
MyBatis之测试添加功能
java·开发语言·mybatis
忘梓.35 分钟前
从二叉树到 STL:揭开 set 容器的本质与用法
开发语言·c++
crary,记忆36 分钟前
Angular报错:cann‘t bind to ngClass since it is‘t a known property of div
前端·javascript·angular·angular.js
几何心凉38 分钟前
如何处理React中表单的双向数据绑定?
前端·javascript·react.js
摸鱼仙人~39 分钟前
React Hooks 指南:何时使用 useEffect ?
javascript·react.js·ecmascript
爬虫程序猿41 分钟前
利用 Python 爬虫获取淘宝商品详情
开发语言·爬虫·python
曹勖之1 小时前
在MATLAB中使用自定义的ROS2消息
开发语言·matlab·机器人·ros·simulink·ros2
Luffe船长1 小时前
elementUI点击浏览table所选行数据查看文档
javascript·elementui·vue
waterHBO1 小时前
一个小小的 flask app, 几个小工具,拼凑一下
javascript·vscode·python·flask·web app·agent mode·vibe coding