Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何';s JavaScript';是否实现了本机排序功能?_Javascript_Sorting - Fatal编程技术网

如何';s JavaScript';是否实现了本机排序功能?

如何';s JavaScript';是否实现了本机排序功能?,javascript,sorting,Javascript,Sorting,让我们先看一个例子 var everything = [4,'Red', '$200', 'white', 7.4, 12, true, 0.3, false]; console.log(everything.sort(function(a, b) {return a - b;})); // [4, "Red", "$200", "white", false, 0.3, true, 7.4, 12] 我觉得这很奇怪,即使我知道Number(“红色”),Number(“200美元”)和Numb

让我们先看一个例子

var everything = [4,'Red', '$200', 'white', 7.4, 12, true, 0.3, false];
console.log(everything.sort(function(a, b) {return a - b;})); 
// [4, "Red", "$200", "white", false, 0.3, true, 7.4, 12]
我觉得这很奇怪,即使我知道
Number(“红色”)
Number(“200美元”)
Number(“白色”)
在比较时都给出了
NaN

为什么
4
在结果的第一个位置?我想这与
Array.prototype.sort
的实现有关,那么如何才能看到它的实现呢?

规范 根据,

如果comparefn不是未定义的,并且不是此数组元素的一致比较函数(见下文),则排序行为是实现定义的

[……]

如果集合S中的所有值A、b和c(可能是相同的值)满足以下所有要求,则函数comparefn是一组值S的一致比较函数[…]

  • 当给定一对特定的值a和b作为其两个参数时,调用comparefn(a,b)总是返回相同的值v。此外,类型(v)是数字,,而v不是NaN。[……]
也就是说,如果比较函数的返回值是NaN,那么对排序的调用行为是“实现定义的”


实际上 Google Chrome和NodeJS(V8引擎)以及Opera(Futhark/Carakan)返回:

Firefox(SpiderMonkey)返回:

Internet Explorer返回:

["Red", "$200", false, 0.3, true, 4, "white", 7.4, 12]

它通常是本机代码,所以我想每个实现都会有所不同。可能应该检查spec.FWIW,ES5说指定的比较函数是因为它不是“一致的比较函数”。
[false, 0.3, true, 4, "Red", "$200", "white", 7.4, 12]
["Red", "$200", false, 0.3, true, 4, "white", 7.4, 12]