6

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 comparison 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?

asked Aug 10, 2010 at 3:02

1 Answer 1

12

As you can see here (chinese), this code might be used to test for Chrome. EDIT: see below for the complete 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 comparison function.

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

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

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

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

Looks demystified!

answered Aug 10, 2010 at 3:08
Sign up to request clarification or add additional context in comments.

11 Comments

thats a bit harsh considering there is easy methods to check that
oh, there are programming fails everywhere. sometimes people really like the bad way of doing things :)
@Dani: indeed! However, the code might be used for something else... It would be great to hear from "the Javascript Ninja".
I don't get it... what does hasDuplicate do?
@Dani - Oh, whoops. I understand the code now, I was thinking about it backwards. If the function isn't optimized away, baseHasDuplicate is false, allowing the custom comparison function to determine if there are duplicates. If it has been optimized away, this ensures hasDuplicate is always true, meaning the traversal of the array to remove duplicates will always occur (essentially a counter-optimization to Chrome's optimization of sort()).
|

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.