JavaScript: Strange Behavior on sort function of Array Object in IE 6.0

按照ecma-262 spec和msdn,JavaScript(包括JScript)中的Array Object都支持sort方法的,sort方法可以传入一个方法作为参数来决定排序的比较方法,这和C语言标准qsort或者C++的STL或者Java/C#中对序列的排序方法一样,可以通过一个比较两者并按照>0/==0/<0指明两者大于/相等/小于关系的指针/运算子/实现Comparable接口的对象,来实现排序。

之前的写的代码没有注意这个,自己实现了一个Sort方法,传入要排序的Array Object和一个比较方法来对这个Array Object排序。而具体实现是最简单的冒泡法,再加上时脚本的缘故,效率肯定很低。今天,仔细看了一遍msdn上的说明,决定把已有实现该成用Array Object的sort。其实,这是一个再简单不过的工作了,但是奇怪的是,在IE上,怎么都不行,在Firefox/Safari上却运行很正常。灵异啊灵异~~

后来在IE上直接做一个数组,然后再数组后立即调用sort(funcName)测试,运行正常。但在我实际的代码中,数组是嵌在对象里传到某个方法里的,对数组调用不带func参数的sort(),运行正常,在此处window.alert(funcName)也能看到该方法的实现代码,但是如果执行的话,却怎么都说找不到JScript Object,而非IE浏览器却运行正常。非常奇怪的现象啊,难道在IE上Array Object在传递了几次后,其prototype中其带参数的sort方法实效了吗?这样的话IE的测试工作也太弱了吧,连这bug都没找出来?

本来想把自己的全局Sort方法取消了的,看来目前的情况不能取消了,在这个Sort方法里封装了判断浏览器,针对IE调用自己的“土”排序,针对非IE调用原生代码的sort的逻辑。sigh,希望哪天找出根源和解决方法来,把这个非正常处理给取消掉比较好。

wingc

Read more posts by this author.