String.contains() Javascript polyfill
Firefox soporta desde su versión 19 el método contains()
de la clase String
, que devuelve true
o false
según si una cadena contiene o no otra cadena. Por ejemplo:
"foo".contains("oo") // true
"foo".contains("bar") // false
Ningún otro navegador lo soporta de momento, pero es sencillo hacerlos compatibles. Con estas lineas se comprueba si existe el método contains
y en caso contrario se creará.
if(!('contains' in String.prototype)){
String.prototype.contains = function(str, startIndex) {
return -1 !== String.prototype.indexOf.call(this, str, startIndex);
};
}
También se podría usar algo como if( "foo".indexOf("bar") != -1 ){ // Encontrado }
, pero no me parece en absoluto intuitivo, así que buscando encontré el código anterior, que permitirá escribir un código bastante más «para humanos».
Hay cierto debate sobre si se debe o no modificar las clases de las que no se es propietario. Entiendo que en determinadas situaciones puede suponer un problema, pero me cuesta imaginar el caso en el que esto lo sea. En cualquier caso siempre podéis hacer una función nueva pasándole las cadenas correspondientes como dos parámetros por ejemplo, sin sobreescribir la clase String original, pero a mí me parece más limpio así.
strContainsStr( str1, str2){
return ( str1.indexOf(str2) != -1 ? true : false);
}
strContainsStr("foo","oo") // true
strContainsStr("foo","bar") // false
Por ejemplo.