文章目录
- 一、字符串 (String)
- 二、数字 (Number)
-
- [2.1 整数与浮点数](#2.1 整数与浮点数)
- [2.2 安全整数](#2.2 安全整数)
- [2.3 特殊值](#2.3 特殊值)
- [2.4 浮点数问题](#2.4 浮点数问题)
- [2.5 进制数据](#2.5 进制数据)
- [2.6 NaN](#2.6 NaN)
- [三、 布尔值 (Boolean)](#三、 布尔值 (Boolean))
- 四、空值 (Null)
- 五、未定义 (Undefined)
-
- [5.1 null 和 undefined区别](#5.1 null 和 undefined区别)
- [六、 Symbol](#六、 Symbol)
- 七、BigInt
- 八、总结
在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 |