2010-08-10 67 views
7

在調試使用jQuery的一個JavaScript代碼,我發現下面的代碼:這是什麼(無用?)JavaScript代碼做什麼?

[0, 0].sort(function() 
{ 
    baseHasDuplicate = false; 
    return 0; 
}); 

按照我的理解JavaScript代碼的代碼將整理含有比較功能兩個零,將始終設置一個全局變量,將返回平等陣列,其效果與baseHasDuplicate = false;相同。
來自一個有價值的來源,我想我錯過了一些東西。 我錯過了什麼,或者這是一個編程失敗?

回答

12

正如您所見,here(中文),此代碼可能用於測試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


編輯:如果你瀏覽灒的源代碼,here例如(進入「灒CSS選擇器引擎」下的黃色區域,被稱爲「灒變量」),你會發現下面的解釋:

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; 
});  

看起來很神祕!

+2

這就是有點苛刻考慮有簡單的方法來檢查 – Dani 2010-08-10 03:10:18

+1

哦,有編程無處不在。有時候人們真的很喜歡做事的壞方法:) – 2010-08-10 03:11:18

+0

@Dani:確實!但是,代碼可能用於其他方面......從「Javascript忍者」中聽到這將非常棒。 – 2010-08-10 03:14:14