JavaScript 属性定义的默认开关:值能读到,为什么遍历、改写和删除都失败 把配置对象从普通赋值改成 Object.defineProperty,只写 value,读取值一切正常。随后 Object.keys 看不到这个字段,赋新值或删除又抛出异常。问题不在对象丢失,而在新建属性时没有填写的... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript 后行断言:同样的贪婪分组,为什么在左边少拿了一个字符 把两个捕获组移进后行断言,表达式仍然匹配成功,但第一个组从 ab 变成 a,第二个组从 c 变成 bc。不是贪婪规则失效了,而是断言从当前位置向左检查,右侧的组先获得匹配机会。判断分组结果时,必须把方向一起带进推演。... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript 静态私有字段:子类继承了方法,为什么仍读不到父类的计数 一个编号工具把累计数量放在静态私有字段里,父类调用一直正常。后来为了添加一种编号类型建立子类,子类虽然能找到原来的静态方法,一执行却抛出 TypeError。方法没有丢失,出问题的是方法里 this 指向了子类,而私... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript 位移的三十二位边界:右移零位,为什么数值也会改变 读取一个三十二位标志值后,程序员为了“确保是整数”给它补上右移零位,结果正数变成负数;换成三个大于号后看似恢复,另一个更大的编号却变成了五。这里并没有普通小数精度问题:位移运算会先把数值放进固定宽度的位模式,零位移动... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript 暂时性死区:外层已有同名变量,typeof 为什么仍然报错 把几行代码包进一个块,并在块末尾声明局部变量后,原先用于检查外层配置的 typeof 却突然抛错。原因不是 typeof 失去类型判断能力,而是同名的局部绑定已经影响整个块,执行尚未走到初始化时,它还不能被读取。存在... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript Object.is:两个零看起来相同,为什么缓存还需要区分 做一个只记住上次输入的缓存,看上去只要用三个等号比较就够了。可当输入从正零变成负零,缓存可能直接复用旧结果;连续两次输入 NaN,却又每次重新计算。两种现象来自同一件事:你选的相等规则与计算语义没有对齐。Object... yunqueblog/ 技术教程/ 2026-10-02/ 6 阅读
JavaScript JSON.parse reviver:父对象收到的值,为什么已经被孩子改过 读取配置时,希望把计数转换成需要的形式,再去掉只供调试的字段。有人把这些逻辑放进 JSON.parse 的第二个参数,却发现父对象已经变了,甚至整份结果变成 undefined。问题通常来自对 reviver 调用时... yunqueblog/ 技术教程/ 2026-10-02/ 3 阅读
JavaScript 正则匹配区间:相同文字出现两次,怎样标中真正捕获的那一段 解析日志后要高亮一个数字,代码先拿到捕获文本,再调用 indexOf 搜索它的位置。如果同一行里相同数字出现两次,就可能标错第一处。正则实际上已经知道自己匹配了哪一段,启用 d 标志便能把这份位置一并取回。匹配区间以... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
JavaScript 对象转原始值:同一个对象,拼接和乘法为什么走不同提示 一个封装数量的对象放进模板字符串时显示为“十二件”,乘以二却能算出二十四。随后有人用空字符串加对象来生成日志,又得到另一种文字。这里并非随机调用了某个方法,而是不同操作给对象转换提供了不同提示。Symbol.toPr... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
JavaScript 正则 split:只是加了括号,分隔符为什么也进了结果 一段拆分编号的代码原本返回三个字段。为了让正则更好读,开发者给分隔符套上一层括号,结果数组忽然多出逗号;再加一个可选分组,数组里连 undefined 都出现了。这通常不是输入文件坏了,而是捕获组改变了 split ... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读