前段时间看到有人在网上说javascript烂,原因之一是下面这个例子。[20, 3, 10].sort();// [10, 20, 3]这样的结果看上去确实难以理解,说得好听是违反直觉,难听则是错得不可理喻,这门语言怎么会在这么简单的地方犯这么低级的错误。然而,虽然javascript设计上有一些缺陷,在这个行为上却不能背黑锅。一切都是有原因的。我们知道javascript是一门动态类型的语言,换句话说在编译时不会对变量的类型做检查(作为一门在大多数环境下解释运行的脚本语言,也没有编译这样的机会。),换句话说变量没有和类型绑定(声明变量的时候不像静态类型语言那样String msg、Date now,而是用统一的var msg、var now),和这样的理念相一致的自然是,作为容器的数组对其中的元素的数据类型没有任何限制。var elem=[1, ‘sit’, new Date()];有了这个前提,我们再来看数组的排序。任何排序都要基于一定的标准,例如数字可以按照它们的大小,字符可以根据某种编码,对象可以根据它们的某种属性或者字符串形式。总之,对于某个需要排序的集合,需要在它们的元素间定义一个函数compare(a, b),当任意两个元素作为参数时,函数将依据大于、等于、小于三种情况,得出确定的结果。对javascript中的数组排序,当没有给sort方法传入比较函数时,java
...
继续阅读
(41)