最新JavaScript matchAll 的游标副本:遍历已到末尾,原正则的位置为什么没动 把exec循环换成matchAll以后,匹配结果已经读到最后,原正则的lastIndex却仍停在一。接着重新调用,又从同一个非零位置开始。这种行为来自matchAll为普通正则创建匹配副本:它保留创建时的起点,遍历推... yunqueblog/ 技术教程/ 2026-10-04/ 3 阅读
JavaScript 数组的 species:map 生成了子类,为什么 toReversed 却返回普通数组 自定义数组子类里设置了Symbol.species,map返回预期的结果类;换用toReversed后,结果却没有那个类的原型。两个方法都能创建新数组,但并不因此共享相同的构造协议。迁移集合操作时,只检查元素值可能漏... yunqueblog/ 技术教程/ 2026-10-03/ 3 阅读
JavaScript bind 遇到 new:接收者已经固定,为什么字段却写进了新实例 先把Ticket绑定到一个已有对象receiver,再通过new调用绑定结果,this上的字段却没有写进receiver,而是出现在新实例里。若把bind理解成“无论怎么调用都只用这个对象”,工厂函数或测试替身就容易... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript 函数的 length:声明了三个参数,为什么只报告一个 写通用调用适配器时,有人把fn.length当成函数能接收的参数个数,于是只转发这么多项。一个函数原本声明path、mode、retries三个位置,给mode加上默认值以后,length却从三变成一;后面的重试次数... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
TextEncoder.encodeInto 的容量边界:还剩三个字节,为什么表情一个字节也没写入 把字符串写进固定容量的Uint8Array时,缓冲区还剩空间,并不表示编码器会把下一个字符切开塞进去。encodeInto要为一个码点写入完整UTF-8序列;如果剩余容量不足,就在该码点之前停止,并报告本次读了多少输... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript Set.intersection 的顺序:只加一个无关成员,交集为什么倒过来了 筛选可选标签时,左侧Set按页面希望的顺序保存blue、red,右侧保存允许出现的red、blue。调用intersection后,看起来保住了左侧顺序。后来只向左侧加入一个右侧根本没有的green,交集仍是那两种颜... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript Object.groupBy 的键转换:两个不同对象,为什么被分进同一组 按owner对象给任务分组,回调返回了两个不同的owner,Object.groupBy却只产出一组。原因是回调返回值会转换成对象属性键:两个普通对象在本例都变成同一个字符串[object Object],区别在分组... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript JSON 白名单:只想筛顶层字段,为什么嵌套对象也变成空了 导出一份任务数据时,只想保留顶层job和rows,于是把这两个名字放进JSON.stringify的第二个参数。结果两个顶层字段都在,job里面却变成空对象,rows中的对象也丢了字段。数组形式的replacer是一... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript Array.fill 的对象参数:只改第一格,为什么三格的计数一起变了 给三张任务卡初始化计数,用Array(3).fill({ count: 0 })看起来简洁。随后只把第一张卡的count改成七,打印时三张卡却全是七。fill收到的是已经创建好的一个对象,它不会替每个位置再执行一次对... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript Proxy.revocable:外层访问撤销了,先前取出的对象为什么还能修改 给临时编辑会话提供一个可撤销代理,结束时调用 revoke,后续通过代理读写会报错。可是如果调用方早已取出 proxy.nested,保存了里面的普通对象,撤销外层代理并不会让那份引用一起失效。Proxy.revoc... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读