正如你可以在这里(中文)看到的那样,这段代码可能用于测试 Chrome。 编辑:请参阅下面的完整故事。
正如文章所解释的那样,Chrome 优化了“.sort(...)”方法,使得[0, 0].sort(...)
调用不会执行给定的比较函数。
从文章中可以看出,Chrome 的“.sort(...)”实现类似于:
function sort(comparefn) {
var custom_compare = (typeof(comparefn) === 'function');
function Compare(x,y) {
if (x === y) return 0;
if (custom_compare) {
return comparefn.call(null, x, y);
}
...
}
作为
0 === 0
为真,它不会调用
comparefn
。
在jQuery的情况下,它不会将全局变量
baseHasDuplicate
设置为
false
。
编辑:如果您浏览Sizzle的源代码,例如
这里(转到"Sizzle CSS Selector Engine"下面的黄色部分,称为"Sizzle variables"),您将找到以下说明:
var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
done = 0,
toString = Object.prototype.toString,
hasDuplicate = false,
baseHasDuplicate = true;
// Here we check if the JavaScript engine is using some sort of
// optimization where it does not always call our comparision
// function. If that is the case, discard the hasDuplicate value.
// Thus far that includes Google Chrome.
[0, 0].sort(function(){
baseHasDuplicate = false;
return 0;
});
看起来已经很简单易懂了!
baseHasDuplicate
就是 false,允许自定义比较函数来确定是否有重复项。如果它已经被优化掉,这将确保hasDuplicate
总是为true
,这意味着遍历数组以删除重复项将始终发生(实际上是 Chrome 对sort()
优化的反优化)。 - Tim Stone