为什么在指定Array.prototype.sort时ECMAScript标准undefined坚持将compareFn值放在数组的末尾?我希望compareFn能够相应地处理这些问题,并且可以完全控制。

使用哪个compareFn都没有关系。该规范规定了在调用compareFn之前的行为。

See the SortCompare abstract operation listing in the spec,步骤10至12。

作为概念证明,请尝试运行以下命令:

var values = [undefined, undefined, 123];

values.sort(function(x, y) {
    console.log('compareFn called');
});


不会有任何痕迹。

最佳答案

因此,您的问题实际上不是:


  为什么ECMAScript标准Array.prototype.sort坚持
  指定a时将未定义的值放在数组的末尾
  compareFn?


因为您自己回答:它在规范中定义。

我只能猜测,如果我这样做了,那么我会猜到你真正的问题是:


  为什么要这样写规范?


这个问题没有真正的答案,但是如果我要答案,我会在Twitter上ping BrendanEichRick Waldron或任何其他TC39成员,或在es-discuss邮件列表中注册。

也许如果您是社区的一部分,那么可以避免使用此有趣的功能。

10-06 04:32