📦 第二章:变量与数据类型

掌握变量声明和数据类型的基础知识

2.1 声明变量的三剑客

现代 JavaScript 中,我们使用 let 和 const 声明变量,坚决不用 var。

let、const 和 var 的区别

关键字 作用域 可重新赋值 可重复声明 推荐使用
let 块级作用域
const 块级作用域 是 (优先)
var 函数作用域
// 使用 const 声明常量(推荐)
const PI = 3.14159;

// 使用 let 声明变量
let count = 0;
count = 1; // 可以重新赋值

// 坚决不用 var
var oldVariable = 'old'; // 避免使用
最佳实践:优先使用 const,只有当变量需要重新赋值时才使用 let。

2.2 基本数据类型

JavaScript 的 7 种基本数据类型

// 字符串
const name = 'John';

// 数字
const age = 30;
const pi = 3.14;

// 布尔值
const isActive = true;

// 空值
const emptyValue = null;

// 未定义
let undefinedValue;

// Symbol
const uniqueId = Symbol('id');

// BigInt
const bigNumber = 9007199254740991n;

2.3 2026 新特性:精确数学与大数运算

Math 扩展

// 精确的数学计算
const result1 = 0.1 + 0.2; // 传统方式:0.30000000000000004

// 使用新的精确数学方法
const result2 = Math.sum(0.1, 0.2); // 2026 新特性:0.3

// 其他新方法
const average = Math.mean(1, 2, 3); // 2
const median = Math.median(1, 3, 2); // 2

大数运算

// BigInt 运算
const big1 = 9007199254740991n;
const big2 = 9007199254740991n;
const sum = big1 + big2; // 18014398509481982n

// 与普通数字转换
const num = 123;
const bigNum = BigInt(num);
const backToNum = Number(bigNum);

2.4 类型转换与检测

显式转换

// 转换为数字
const str = '123';
const num = Number(str); // 123
const num2 = +str; // 123(简写方式)

// 转换为字符串
const num3 = 123;
const str2 = String(num3); // '123'
const str3 = num3 + ''; // '123'(简写方式)

// 转换为布尔值
const value = 'hello';
const bool = Boolean(value); // true
const bool2 = !!value; // true(简写方式)

类型检测

// typeof 操作符
typeof 'hello'; // 'string'
typeof 123; // 'number'
typeof true; // 'boolean'
typeof null; // 'object'(历史遗留问题)
typeof undefined; // 'undefined'
typeof Symbol(); // 'symbol'
typeof 123n; // 'bigint'

// 检测数组
Array.isArray([1, 2, 3]); // true

// 检测 null
const value = null;
value === null; // true

// 检测 undefined
let undefinedValue;
undefinedValue === undefined; // true

安全检测(可选链的前置知识)

// 传统的安全检测
const user = { name: 'John' };
if (user && user.address && user.address.street) {
    console.log(user.address.street);
}

// 使用可选链(现代方式)
const street = user?.address?.street;
console.log(street); // undefined(不会报错)

2.5 不可变性思维

不可变性是现代 JavaScript 的重要概念,可以避免很多 bug。

什么是不可变性?

不可变性意味着一旦创建了数据,就不能直接修改它。而是创建一个新的数据副本。

// 可变的方式(不推荐)
let arr = [1, 2, 3];
arr.push(4); // 直接修改原数组

// 不可变的方式(推荐)
const arr2 = [1, 2, 3];
const newArr = [...arr2, 4]; // 创建新数组

// 对象的不可变操作
const user = { name: 'John', age: 30 };
const newUser = { ...user, age: 31 }; // 创建新对象

不可变性的好处

动手练习

练习 1:变量声明

  1. 使用 const 声明几个常量
  2. 使用 let 声明一个变量并修改它
  3. 尝试使用 var 并观察其行为
  4. 体会块级作用域和函数作用域的区别

练习 2:数据类型

  1. 创建各种数据类型的变量
  2. 使用 typeof 检测它们的类型
  3. 尝试类型转换
  4. 使用 BigInt 进行大数运算

练习 3:不可变性

  1. 创建一个数组和一个对象
  2. 使用不可变的方式修改它们
  3. 验证原数据没有被修改
  4. 尝试使用扩展运算符创建新数据