[] 和 {} 在 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__ 为什么在这个工具里没事。