最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

jquery - What does this (useless?) javascript code do? - Stack Overflow

programmeradmin4浏览0评论

While debugging a javascript code that uses jQuery I found the following code:

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

By my understanding of javascript this code will sort array containing two zeroes with parison function that will always set a global variable and will return equality, which has same effect as baseHasDuplicate = false;.
Coming from a valued source I think I missed something. Did I miss something or is this a programming fail?

While debugging a javascript code that uses jQuery I found the following code:

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

By my understanding of javascript this code will sort array containing two zeroes with parison function that will always set a global variable and will return equality, which has same effect as baseHasDuplicate = false;.
Coming from a valued source I think I missed something. Did I miss something or is this a programming fail?

Share Improve this question asked Aug 10, 2010 at 3:02 DanielDaniel 31.6k19 gold badges86 silver badges144 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 12

As you can see here (chinese), this code might be used to test for Chrome. EDIT: see below for the plete story..

As explained in the article, what happens is that Chrome optimizes the ".sort(...)" method in such a way that the [0, 0].sort(...) call won't execute the given parison function.

From the article, Chrome's implementation of ".sort(...)" is something like:

function sort(parefn) {
  var custom_pare = (typeof(parefn) === 'function');
  function Compare(x,y) {
    if (x === y) return 0;
    if (custom_pare) {
      return parefn.call(null, x, y);
    }
    ...
}

As 0 === 0 is true, it won't call parefn.

In the case of jQuery, it won't set the global variable baseHasDuplicate to false.


EDIT: if you browse Sizzle's source code, here for example (go to the yellow section under "Sizzle CSS Selector Engine", called "Sizzle variables"), you will find the following explanation:

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 parision
// function. If that is the case, discard the hasDuplicate value.
//   Thus far that includes Google Chrome.
[0, 0].sort(function(){
        baseHasDuplicate = false;
        return 0;
});     

Looks demystified!

发布评论

评论列表(0)

  1. 暂无评论