网淘吧来吧,欢迎您!

JavaScript

2026-04-01 新闻来源:网淘吧 围观:17
电脑广告
手机广告

何时使用

用户需要JavaScript专业知识——从核心语言特性到现代模式。代理处理async/await、闭包、模块系统以及ES2023+特性。

快速参考

主题文件
异步模式async.md
类型强制转换规则coercion.md
数组和对象方法collections.md
现代ES特性modern.md

相等性陷阱

  • ==会进行强制类型转换:"0" == false结果为真——请使用===始终
  • NaN !== NaN——请使用Number.isNaN(),而非=== NaN
  • typeof 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语句被禁止使用

JavaScript

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏

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

相关文章

您是本站第364765名访客 今日有77篇新文章/评论