Ovi*_*lia 7 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]
Run Code Online (Sandbox Code Playgroud)
我认为这很奇怪,即使我知道Number("Red")
,Number("$200")
并且在比较时Number("white")
都给予了NaN
.
为什么4
在第一个结果?我想它与实现有关Array.prototype.sort
,所以我怎样才能看到它的实现?
如果comparefn不是未定义和不是该阵列(见下文)中的元素一致的比较函数,排序行为是实现定义.
[...]
如果集合S [...]中的所有值a,b和c(可能是相同的值)满足以下所有要求,则函数comparefn是一组值S的一致比较函数.
- 当给定一对特定值a和b作为其两个参数时,调用comparefn(a,b)始终返回相同的值v.此外,Type(v)是Number,而v不是NaN.[...]
也就是说,如果比较函数的返回值是NaN,则对sort的调用的行为是"实现定义的".
谷歌Chrome和NodeJS(V8引擎),以及Opera(Futhark/Carakan)返回:
[4, "Red", "$200", "white", false, 0.3, true, 7.4, 12]
Run Code Online (Sandbox Code Playgroud)
Firefox(SpiderMonkey)返回:
[false, 0.3, true, 4, "Red", "$200", "white", 7.4, 12]
Run Code Online (Sandbox Code Playgroud)
Internet Explorer返回:
["Red", "$200", false, 0.3, true, 4, "white", 7.4, 12]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
657 次 |
最近记录: |