JavaScript 中 Array.prototype.sort 的稳定性与比较函数陷阱
最近在重构一个数据表格组件时,遇到一个看似简单却折腾了半天的 bug:明明按状态和时间排序,结果分页后部分行顺序乱跳。排查后发现根源是 Array.prototype.sort 的默认行为与比较函数返回值处理。在 V8 引擎中,数组长度小于等于 10 时使用插入排序,大于 10 时使用快速排序,而快速排序在旧版 V8 中是不稳定的。虽然 ES2019 已经要求 sort 必须稳定,但 Node.js 10 及之前、部分旧浏览器仍可能不稳定,并且比较函数返回非数字、返回布尔值、返回浮点数都会导致不可预期的排序结果。这篇文章会从实际代码出发,分析排序不稳定的表现、比较函数的正确写法、数字与字符串排...