js基本数据类型有哪些

admin 8 0

### JavaScript基本数据类型深度解析

在JavaScript的广阔世界中,数据类型是构建程序大厦的基石,它们定义了变量可以存储信息的种类和方式,JavaScript是一种动态类型语言,意味着变量可以在运行时改变其类型,但这并不妨碍我们深入理解其内置的基本数据类型,本文将深入探讨JavaScript的七大基本数据类型:`Undefined`、`Null`、`Boolean`、`Number`、`String`、`Symbol`(ES6新增)以及`BigInt`(ES2020新增),并通过实例和理论相结合的方式,揭示它们背后的奥秘。

#### 一、JavaScript基本数据类型概览

JavaScript中的基本数据类型包括:

1. **Undefined**

2. **Null**

3. **Boolean**

4. **Number**

5. **String**

6. **Symbol**(ES6)

7. **BigInt**(ES2020)

这些类型直接存储在栈(Stack)内存中,与对象(Object)类型不同,后者存储在堆(Heap)内存中,并通过引用在栈内存中访问。

#### 二、Undefined 类型

`Undefined` 类型是JavaScript中的一个特殊值,用于表示变量已声明但未初始化时的值,当你声明了一个变量但没有给它赋值时,这个变量的值就是 `undefined`。

let myVar;
console.log(myVar); // 输出:undefined

`undefined` 并不是全局对象 `window` 的一个属性,而是一个全局变量,在严格模式下(strict mode),`undefined` 不能被重新赋值。

#### 三、Null 类型

`Null` 类型是JavaScript中的另一个特殊值,表示“空”或“无”的概念,它通常用于表示尚未指向任何对象的引用,`null` 与 `undefined` 在很多情况下可以互换使用,但它们表示的概念有所不同:`undefined` 表示变量未定义,而 `null` 表示变量已定义但当前没有指向任何对象。

let myObject = null;
console.log(myObject); // 输出:null

#### 四、Boolean 类型

`Boolean` 类型表示逻辑实体,只有两个值:`true` 和 `false`,JavaScript中的许多操作都会返回布尔值,比如比较操作符(`==`, `===`, ``, `!=` 等)和逻辑操作符(`&&`, `||`, `!`),JavaScript还提供了 `Boolean()` 函数,用于将其他类型的值转换为布尔值。

let isDone = false;
console.log(isDone); // 输出:false

let result = Boolean(0); // 转换为false
console.log(result); // 输出:false

#### 五、Number 类型

`Number` 类型用于表示整数和浮点数,JavaScript中的数字遵循IEEE 754标准,这意味着它们可以是32位或64位的浮点数,尽管JavaScript提供了大整数运算的能力(通过`BigInt`),但`Number`类型仍然有其局限性,比如无法精确表示非常大的整数或非常小的分数。

let num = 123.456;
console.log(num); // 输出:123.456

// 精度问题示例
let bigNum = 0.1 + 0.2;
console.log(bigNum); // 输出:0.30000000000000004,注意这不是我们期望的0.3

#### 六、String 类型

`String` 类型用于表示文本数据,在JavaScript中,字符串是不可变的,这意味着一旦字符串被创建,就不能改变其内容(尽管可以创建新的字符串来包含修改后的内容),字符串可以包含0个或多个字符,包括空格、换行符等。

let greeting = "Hello, World!";
console.log(greeting); // 输出:Hello, World!

// 字符串是不可变的
greeting = greeting + " Again!";
console.log(greeting); // 输出:Hello, World! Again!,注意这是创建了一个新字符串

#### 七、Symbol 类型(ES6)

`Symbol` 是ES6中引入的一种新的基本数据类型,用于创建唯一的标识符,每个`Symbol`值都是唯一的,这解决了JavaScript中对象属性名冲突的问题,`Symbol`值可以作为对象属性的标识符,但不能用作字符串或其他类型的值。

let sym = Symbol("description");
let obj = {};
obj[sym] = "value";

console.log(obj[sym]); // 输出:value
console.log(obj["description"]); // 输出:undefined,因为"description"不是Symbol值

#### 八、BigInt 类型(ES2020)

`BigInt