手写代码 · 实测数据 · 一次讲透原理Hand-rolled Code · Measured Numbers

技术博客与工程手记Writing About the Craft

76 篇手写引擎、实测数据驱动的工程手记。

76 notes on hand-rolled engines and measured numbers.

按主题筛选Filter by topic

近期文章Recent Articles

[] 和 {} 在 JSON Diff 里是同一个东西

jsonDiff([], {}) 返回空数组,工具显示「完全一致——两个文档结构相等。」根因是第二个分支 a && b && typeof a === "object" 不含 Array.isArray,数组与对象落在同一个按 Object.keys 逐键比的分支里,于是 [1,2,3] 与 {"0":1,"1":2,"2":3}、[[1]] 与 {"0":[1]} 也判等。同一个结构差异会产出两种路径语法:[] 与 [1,2,3] 报 $[0],{} 与 [1,2,3] 报 $.0。逐个打掉分支判定顺序、键顺序与缩进确实不是噪音、数组按索引比让重排算两处变更、非标识符键改走 JSON.stringify 加引号、布尔与数字算变更、字典序决定报出顺序、200 条之后停止比较、值超过 80 字符截到 77 加省略号,以及 __proto__ 为什么在这个工具里没事。

阅读全文Read Article

2^64 - 1 和 2^64 在 JavaScript 里是同一个数字

Number("18446744073709551615") 与 Number("18446744073709551616") 都返回 18446744073709552000,且 === 为 true。2^64 下方的 double 间距是 2048、上方是 4096,2^53+1 向下舍、2^53+3 向上舍、2^64+2048 恰好落在两个 double 正中按向偶数舍入。逐个打掉 BigInt 往返、前缀按行覆盖、-0xff 的符号位置、非法字符返回 null、一行坏数据不拖累其余行,并说清为什么打印出来的十进制串不是那个整数值。

阅读全文Read Article

XML 转了个来回,文字跑到元素前面去了

XML 与 JSON 互相转换不是同一件事。XML→JSON 把交错文本压成一段 #text、丢掉注释与 CDATA;JSON→XML 要求根只有一个键、文本永远排在子元素前面。同一个 roundtrip 在两个方向各自丢一份信息,而转换报告成功。逐个给出实测输入输出,并说清为什么 JSON 的结构表达不了 XML 的顺序。

阅读全文Read Article

2026

探索配套开发者工具库Explore Matching Developer Tools

JSON / SQL 格式化、JWT 解码、复利与房贷测算…… 135 款纯浏览器工具全部免费、数据不出页面。JSON/SQL formatting, JWT decoding, mortgage and compound-interest math — 135 free tools that run entirely in your browser, nothing uploaded.

前往工具库 →Browse Tools →