[ PROMPT_NODE_24916 ]
javascript-mastery
[ SKILL_DOCUMENTATION ]
# 🧠 JavaScript 精通
> 33+ 个每个开发者都应掌握的 JavaScript 核心概念,灵感来自 [33-js-concepts](https://github.com/leonardomso/33-js-concepts)。
## 何时使用此技能
在以下场景使用:
- 解释 JavaScript 概念
- 调试棘手的 JS 行为
- 教授 JavaScript 基础知识
- 审查 JS 代码的最佳实践
- 理解语言特性
---
## 1. 基础知识
### 1.1 原语类型
JavaScript 有 7 种原语类型:
javascript
// 字符串
const str = "hello";
// 数字 (整数和浮点数)
const num = 42;
const float = 3.14;
// BigInt (用于大整数)
const big = 9007199254740991n;
// 布尔值
const bool = true;
// 未定义
let undef; // undefined
// 空值
const empty = null;
// 符号 (唯一标识符)
const sym = Symbol("description");
**关键点**:
- 原语是不可变的
- 按值传递
- `typeof null === "object"` 是一个历史遗留 Bug
### 1.2 类型强制转换
JavaScript 会隐式转换类型:
javascript
// 字符串转换
"5" + 3; // "53" (数字 → 字符串)
"5" - 3; // 2 (字符串 → 数字)
// 布尔值转换
Boolean(""); // false
Boolean("hello"); // true
Boolean(0); // false
Boolean([]); // true (!)
// 相等性转换
"5" == 5; // true (转换类型)
"5" === 5; // false (严格相等)
**假值 (Falsy values)** (共 8 个):
`false`, `0`, `-0`, `0n`, `""`, `null`, `undefined`, `NaN`
### 1.3 相等运算符
javascript
// == (宽松相等) - 会转换类型
null == undefined; // true
"1" == 1; // true
// === (严格相等) - 不会转换类型
null === undefined; // false
"1" === 1; // false
// Object.is() - 处理边缘情况
Object.is(NaN, NaN); // true (NaN === NaN 为 false!)
Object.is(-0, 0); // false (0 === -0 为 true!)
**规则**:除非有特殊理由,否则始终使用 `===`。
---
## 2. 作用域与闭包
### 2.1 作用域类型
javascript
// 全局作用域
var globalVar = "global";
function outer() {
// 函数作用域
var functionVar = "function";
if (true) {
// 块级作用域 (仅限 let/const)
let blockVar = "block";
const alsoBlock = "block";
var notBlock = "function"; // var 会忽略块级作用域!
}
}
### 2.2 闭包
闭包是一个能够记住其词法作用域的函数:
javascript
function createCounter() {
let count = 0; // "被闭包捕获"的变量
return {
increment() {
return ++count;
},
decrement() {
return --count;
},
getCount() {
return count;
},
};
}
const counter = c