JavaScript 数组排序:10 为什么排在 2 前面,原数组又是谁改的 一次排序里,其实藏着两个独立决定把一组数字交给 sort,结果可能让十排在二前面;把返回值放进新变量后,原数组也已经变了。这不是同一种错误:前者来自默认比较方式,后者来自方法会修改接收数组。修复排序前,要同时回答按什... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
JavaScript Map 对象键:字段完全一样,为什么 get 还是找不到 重新构造一个对象,并没有拿到原来的键把任务对象放进 Map,稍后根据接口返回的编号重新创建一个同样的对象,再用它读取结果,可能得到 undefined。检查两边字段时看不出区别,问题却在比较标准:对象作为 Map 的... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
JavaScript 微任务顺序:Promise 已经完成,then 为什么还要等一会儿 状态完成与回调执行不是同一个时刻读取缓存时,我们可能已经拿到结果,于是返回一个立即完成的 Promise。调用方给它登记 then 回调后,却发现下一行同步代码先执行。这种行为会影响初始化标志、日志顺序和事件通知,尤... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
JavaScript 数组空洞:同样读到 undefined,为什么 map 少执行了一次 长度为三,不代表三个位置都有元素表格有三行,程序用 new Array(3) 准备容器,再调用 map 生成行对象,结果回调一次都没有执行。问题不在回调函数,而在这个数组只有长度,没有对应的索引属性。这样的缺位通常叫... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
JavaScript BigInt 精确传输:从字符串入口到 JSON 往返都保住整数 转换成大整数之前,原始值必须仍然完整后端发来一个很长的计数值,前端先转成 Number,再转成 BigInt,结果尾数已经变了。后一次转换不会找回前一次舍入掉的数字:它只能把当前保存的数值变成大整数。精度约定必须从输... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
JavaScript 正则状态:同一个 test 为什么一会儿 true、一会儿 false 先检查正则对象有没有保留游标表单值没有变化,同一个校验函数第二次却返回失败,问题可能藏在正则对象里。带有 g 或 y 标志的正则会用 lastIndex 记录下一次尝试的位置。test 虽然只返回布尔值,内部仍会执行... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
JavaScript Object.hasOwn 与 in:字段属于对象,还是来自原型链 读取得到一个值,不代表调用者填写了字段某个配置对象把默认重试次数放在原型上,调用者自己没有提交重试字段。读取属性仍能拿到默认值,in 也返回真。如果接口要求“只接受调用者明确提供的字段”,这两个结果都不足以证明字段属... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Promise.allSettled 实战:部分任务失败后,怎样保留结果与对应关系 商品页同时读取用户资料、库存和推荐列表时,某个辅助模块失败,页面仍可能展示其他内容。此时需要一份完整清单:哪些成功,哪些失败,每项属于谁。只在最外层捕获一次异常,通常无法直接得到这份清单。先明确页面允许哪些部分降级,... yunqueblog/ 技术教程/ 2026-10-01/ 5 阅读
JavaScript structuredClone:深拷贝能保留什么,transfer 又会拿走什么 把对象转成 JSON 再解析,常被当成通用深拷贝,但日期会变成字符串,循环引用会失败。有些状态需要保留类型和内部引用关系,适合考虑 structuredClone。本文示例在 Node.js 24.19.0 执行;N... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
JavaScript Intl.Collator 自然排序:数字、相等项与比较器边界 文件列表里的 file10.txt 排在 file2.txt 前面,通常不是排序坏了,而是默认字符串顺序没有把连续数字当作数量。Intl.Collator 可以根据语言规则比较文本,numeric 选项适合常见编号名... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读