JavaScript
2026-04-01
新闻来源:网淘吧
围观:17
电脑广告
手机广告
何时使用
用户需要JavaScript专业知识——从核心语言特性到现代模式。代理处理async/await、闭包、模块系统以及ES2023+特性。
快速参考
| 主题 | 文件 |
|---|---|
| 异步模式 | async.md |
| 类型强制转换规则 | coercion.md |
| 数组和对象方法 | collections.md |
| 现代ES特性 | modern.md |
相等性陷阱
==会进行强制类型转换:"0" == false结果为真——请使用===始终NaN !== NaN——请使用Number.isNaN(),而非=== NaNtypeof null === "object"— 检查=== null显式地- 对象通过引用进行比较 —
{} === {}结果为 false
this 绑定
- 常规函数:
this取决于调用位置 — 在回调中丢失 - 箭头函数:
this来自词法作用域 — 推荐用于回调 setTimeout(obj.method)会丢失this— 使用箭头函数或.bind()- 事件处理器:
this在常规函数中为触发元素,在箭头函数中为 undefined(若无外层 this)
闭包陷阱
- 循环变量被引用捕获 —
让在循环或立即执行函数表达式中捕获值 var提升至函数作用域 — 创建跨迭代共享的单一绑定- 从循环返回函数:所有函数共享同一变量 — 使用
let每次迭代
数组变更
sort()、reverse()、splice()会改变原数组 — 使用toSorted()、toReversed()、toSpliced()(ES2023)push()、pop()、shift(),unshift()mutate — 展开[...arr, item]用于不可变操作delete arr[i]会留下空洞 — 请使用splice(i, 1)来移除并重新索引- 展开运算符和
Object.assign都是浅拷贝 — 嵌套对象仍然引用原始对象
异步陷阱
- 忘记
await返回的是Promise,而非值 — 没有TypeScript时很容易遗漏 forEach不会等待 — 对于顺序异步操作请使用for...of来进行顺序异步操作Promise.all快速失败 — 一个拒绝会导致全部拒绝,如果需要所有结果,请使用Promise.allSettled如果需要所有结果- 未处理的拒绝在Node中会导致崩溃 — 务必处理
.catch()或与await一起使用的try/catch
数字
0.1 + 0.2 !== 0.3— 浮点数问题,可使用整数分币或toFixed()进行显示处理parseInt("08")现在可以正常工作 — 但parseInt("0x10")结果是16,注意前缀Number("")是0,Number(null)是0 — 但Number(undefined)是NaN- 大整数超过2^53会丢失精度 — 使用
BigInt处理大数字
迭代
for...in遍历键(包括继承的) — 使用for...of遍历值for...of在对象上会失败 —— 对象不可迭代,请使用Object.entries()Object.keys()会跳过不可枚举的属性 ——Reflect.ownKeys()会获取所有属性,包括符号
隐式类型转换
[] + []结果是""—— 数组被强制转换为字符串[] + {}结果是"[object Object]"—— 对象的 toString 方法{} + []在控制台中结果是0——{}被解析为代码块,而非对象"5" - 1结果是 4,"5" + 1"51" — 减号会强制类型转换,加号会进行字符串连接
严格模式
"use strict"置于文件或函数顶部 — 可捕获静默错误- 严格模式下隐式全局变量会抛出错误 —
x = 5未经声明的赋值会失败 this在严格模式函数中为 undefined — 而非全局对象- 重复参数和
with语句被禁止使用

文章底部电脑广告
手机广告位-内容正文底部
上一篇:Fieldy AI Webhook
下一篇:NordVPN


微信扫一扫,打赏作者吧~