Scriptia. Javascript y buenas prácticas en español



Scriptia / artículos / String.substr: bug en Internet Explorer y solución

String.substr: bug en Internet Explorer y solución

Saltar a Anotaciones relacionadas

Un mensaje de Carlos Campderrós en javaEScript, la lista de correo, me descubre un bug una peculiaridad de JScript (la implementación de ECMAScript que padecemos en Internet Explorer) con el cual no recuerdo haberme enfrentado. En pocas palabras: el método substr no da los resultados esperados cuanto se utiliza un valor negativo como primer parámetro.

Según la especificación, substr toma dos parámetros, start y length,. Si start es un valor negativo, es tratado como sourceLength + start, siendo sourceLength la longitud de la cadena sobre la que se aplica el método.

Ojo: String.prototype.substr se define en el anexo B de la especificación, sin carácter normativo y sin hacer este método parte del estándar.

Así:

"test".substr(-1);

Debería devolver el valor "t". Explorer –versión 7 incluida- devuelve "test" (la cadena completa) y se queda tan ancho.

Parche

Opción uno: usar el siguiente workaround cuando sea menester:

var s = "test";
// antes (como debería ser siempre)
var sub = s.substr(-1);
// después (para que IE trague)
sub = s.substr(s.length - 1);

Opción dos: implementar un parche allí donde haga falta y usar substr sin preocupación alguna:

Lo haremos detectando el error –en lugar de el navegador o su versión– y usando una función anónima para restringir el ámbito de las variables que declaremos. Tal que así.

(function() {
    if ("test".substr(-1) == "test") {
        var substr = String.prototype.substr;
        String.prototype.substr = function(s) {
            if (s < 0) s = this.length + s;
            return substr.apply(this, arguments);
        }
    }
})();

Para el saco de los fixes habituales.



Publicidad

Di la tuya

Puedes usar markdown y estas etiquetas HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> . Por favor, evita el abuso de las mayúsculas y cuida la ortografía.


Acerca de Scriptia

Saltar a la caja de búsqueda

Scriptia forma parte del PDM de Choan C. Gálvez, desarrollador web residente en Barcelona. Scriptia pretende mejorar la calidad de la documentación acerca de javascript disponible en español.