如何使用Javascript';什么是原生排序方法?

如何使用Javascript';什么是原生排序方法?,javascript,sorting,mergesort,Javascript,Sorting,Mergesort,生成以下排序: [1, false, 10, "b", 3, "33", ":", "R", "^"].sort() 有人能解释一下排序方法是如何工作的吗?我猜它一定是把所有东西都转换成ASCII码了 当我这样做的时候,情节变得更加复杂了 [1, 10, 3, "33", ":", "R", "^", "b", false] 产出如下: [1, false, 10, "b", 3, "33", ":", "R", "^"].sort(function(a,b) {return b-a})

生成以下排序:

[1, false, 10, "b", 3, "33", ":", "R", "^"].sort()
有人能解释一下排序方法是如何工作的吗?我猜它一定是把所有东西都转换成ASCII码了

当我这样做的时候,情节变得更加复杂了

[1, 10, 3, "33", ":", "R", "^", "b", false]
产出如下:

[1, false, 10, "b", 3, "33", ":", "R", "^"].sort(function(a,b) {return b-a})
有什么方法可以消除这种疯狂吗?

来自MDN:

如果未提供compareFunction,则通过将元素转换为字符串并按Unicode代码点顺序比较字符串来对元素进行排序

以及:

如果提供了compareFunction,则将根据compare函数的返回值对数组元素进行排序


Ref:

默认的排序顺序是根据字符串Unicode代码点。为什么您不能添加一些信息,说明为什么您认为它看起来很疯狂,例如,表明它完全不是您认为的那样。字符串unicode是有意义的,但我认为native.sort和sort(fn(a,b,){return b-a})将返回相同的顺序。相反,在第二个示例中,顺序甚至没有翻转。它根据10,1和false重新排列。
[10, 1, false, "b", "33", 3, ":", "R", "^"]