为什么Array.prototype.sort最后会放置未定义的值?

时间:2014-03-11 13:11:21

标签: javascript ecmascript-5

为什么ECMAScript标准Array.prototype.sort在指定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');
});

没有痕迹。

1 个答案:

答案 0 :(得分:2)

所以你的问题实际上是

  

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

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

我只能猜测,如果我这样做,我猜你真正的问题是:

  

为什么规范是按原样编写的?

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

也许如果您是社区的一员,可以避免使用有趣的功能