Como puede ver here (chino), este código puede usarse para probar Chrome. EDIT: ver más abajo para la historia completa ..
Como se explica en el artículo, lo que sucede es que Chrome optimiza el método ".Sort (...)" de tal manera que la llamada [0, 0].sort(...)
no lo hará ejecutar la función de comparación dada.
Desde el artículo, la aplicación del ".Sort (...)" de Chrome es algo así como:
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);
}
...
}
Como 0 === 0
es cierto, no va a llamar comparefn
.
En el caso de jQuery, no establecerá la variable global baseHasDuplicate
en false
.
EDITAR: si examina el código fuente de chisporroteo, here por ejemplo (ir a la sección amarilla bajo "chisporroteo CSS Selector de motor", llamado "variables del chisporroteo"), se encuentra la siguiente explicación:
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!
eso es un poco duro teniendo en cuenta que hay métodos fáciles de verificar que – Dani
oh, la programación falla en todas partes. a veces la gente realmente le gusta la mala forma de hacer las cosas :) –
@Dani: ¡de hecho! Sin embargo, el código podría ser utilizado para otra cosa ... Sería genial escuchar de "el Javascript Ninja". –