为什么在指定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 BrendanEich,Rick Waldron或任何其他TC39成员,或在es-discuss邮件列表中注册。
也许如果您是社区的一部分,那么可以避免使用此有趣的功能。