在调试使用jQuery的
javascript代码时,我发现了以下代码:
[0,0].sort(function() { baseHasDuplicate = false; return 0; });
通过我对javascript的理解,这段代码将对包含两个零的数组进行排序,并使用比较函数,该函数将始终设置一个全局变量并返回相等,这与baseHasDuplicate = false;具有相同的效果.
来自一个有价值的来源,我想我错过了一些东西.
我错过了什么或这是一个编程失败?
解决方法
如您所见,here(中文),此代码可能用于测试Chrome.编辑:请参阅下面的完整故事..
正如文章中所解释的那样,Chrome会以这样的方式优化“.sort(…)”方法,即[0,0] .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的源代码,例如here(转到“Sizzle CSS Selector Engine”下的黄色部分,称为“Sizzle变量”),您将找到以下说明:
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; });
看起来神秘莫测!
原文地址:https://www.jb51.cc/js/159634.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。