Javascript 是否必须使用比较函数对数字数组进行排序?

Javascript 是否必须使用比较函数对数字数组进行排序?,javascript,arrays,sorting,Javascript,Arrays,Sorting,我的印象是,为了对一系列数字进行排序,您必须执行以下操作: var numbers = [4, 1, 2, 3]; function compare(a, b) { return a - b; } numbers.sort(compare); 然而,我发现以下方法似乎有效: var numbers = [5, 3, 2, 6, 4, 7]; var sortNumbers = numbers.sort(); console.log(sortNumbers); 这样做有什么不对

我的印象是,为了对一系列数字进行排序,您必须执行以下操作:

var numbers = [4, 1, 2, 3];

function compare(a, b) {
    return a - b;
} 

numbers.sort(compare);
然而,我发现以下方法似乎有效:

var numbers = [5, 3, 2, 6, 4, 7];
var sortNumbers = numbers.sort();
console.log(sortNumbers); 

这样做有什么不对吗?它似乎在所有情况下对我都有效。

这里有一个默认排序函数:

默认排序顺序根据字符串Unicode代码点

因此,是的,它不会按照您的意愿对数字进行排序。它将它们按字符串排序

为了便于使用,您可以内联执行排序功能:

numbers.sort(function(a,b){return a - b});
它似乎在所有情况下对我都有效

您没有考虑过在字符串表示中由多个数字组成的数字的任何情况。 对于负数,字典默认比较也会失败


有关更多信息和一些反例,请参阅。

您应该使用发布的第一个代码段。看看这个:
[11,2,10,1,5].sort()
->
[1,10,11,2,5]
。通过比较函数,可以更好地控制排序的执行方式。它在处理无法直接比较的对象数组时特别有用。比较函数必须返回一个负数或正数,如果一个项目在另一个项目之前,或者如果要比较的两个项目在排序算法方面应该被视为相等,则返回零。这很有趣。我来到这里是因为我读了标题问题,然后想,“不,有”。我不想提供比较回调。这个答案可以通过描述为什么字符串表示中的多个数字会产生意外的结果来改进。您可以添加以下示例:var分数=[1,10,2,21];scores.sort();//[1,10,2,21]//注意10在2之前,//因为在Unicode代码点顺序中,“10”在“2”之前。@kojiro:我本希望链接的问题能解释一切。@Bergi是的,但链接会腐烂(即使在StackExchange上)。这就是为什么会有。你的答案不仅仅是一个链接式的答案,但我的答案还不够完整。@kojiro:我明白了(并且包含了一个子条款),但我认为这个StackExchange链接不会变质。是的,我可以就这个主题写一篇完整的文章,但我不会在这里写。我曾考虑过只使用该链接进行评论,但实际上,具体问题(“我错过了什么?”)很容易回答。
numbers.sort(function(a,b){return a - b});