String o Cadenas de texto en Javascript
El objeto String , se utiliza para el tratamiento de cadenas de texto. Este tipo, además, provee de un constructor asociado que permite realizar conversiones explícitas
Propiedades
El objeto String tiene, esencialmente tres propiedades:
Propiedad | Descripcion |
---|---|
constructor | Devuelve la función constructora nativa |
length | Devuelve la longitud de la cadena |
prototype | Permite añadir nuevas propiedades y métodos al objeto |
metodos
Los valores primitivos también son considerados objetos. Por esta razón, cualquier literal como «Esto es una cadena» puede ejecutar un método o una propiedad.
El número de métodos disponibles para este objeto es elevado, por lo que, a continuación se muestran los más utilizados:
Metodo charAt
Devuelve el caracter correspondiente a la posición proporcionada por parámetro. Por defecto, la posición es 0
"Hola".charAt(0) // devuelve "H"
Metodo charCodeAt
Devuelve el código Unicode del carácter que corresponda a la posición proporcionada por parámetro. Por defecto, la posición es 0
"Hola".charCodeAt(0); // devuelve 72
Metodo concat
Devuelve otro String que tiene, como resultado, la unión entre de todas las cadenas proporcionadas por parámetro y la actual. El separador de parámetros es el símbolo como
"Hola".concat(" ", "mundo"); //devuelve "Hola mundo"
Metodo endsWith
Devuelve un booleano que indica si la cadena termina con la subcadena proporcionada por parámetro
"Hola mundo".endsWith("do"); // devuelve true
Metodo IndexOf
Devuelve la primera posición en la que aparezca la subcadena proporcionada por parámetro.Si el resultado de la busqueda fue infructuoso, el resultado será -1.
Tiene un segundo parámetro opcional que indica desde qué posición se debe empezar a buscar y que, por defecto, es 0
Es sensible a mayusculas y minusculas
"Hola mundo".indexOf("o", 0); // devuelve 1
Metodo LastIndexOf
Devuelve la última posición en la que aparezca la subcadena proporcionada por parámetro. Si el resultado de la búsqueda fue infructuoso, el resultado será -1.
El método de búsqueda es al revés que el método indexOf, es decir, que busca desde el final hasta el principio.
Tiene un segundo parámetro opcional que indica desde qué posición se debe empezar a buscar y que, por defecto, es la longitud de la cadena.
Este metodo es sensible a mayusculas y minusculas
"Hola mundo".lastIndexOf("o"); //devuelve 9
Metodo match
Permite encontrar coincidencias en una cadena mediante expresiones regulares
"Hola mundo".match(/ho/i);
//Devuelve un array con
["Ho", index: 0, input: "Hola mundo", groups:undefined]
Metodo normalize
Permite convertir a la forma normal Unicode una cadena pasada como argumento. La forma normal a elegir tiene cuatro posibles valores:
- NFC: Forma de Normalización de Composición Canónica.
- NFD: Forma de Normalización de Descomposición Canónica.
- NFKC: Forma de Normalización de Composición de Compatibilidad.
- NFKD: Forma de Normalización de Descomposición de Compatibilidad.
A parte de lo evidente, este método es útil, por ejemplo, para reemplazar acentos. Por defecto, su valor es NFC.
"Ambigüedad inherente".normalize('NFD').replace(/[\u0300-\u036f]/g,"");
//devuelve "Ambiguedad inherente"
Método repeat
Devuelve la concatenación de la cadena repetida las veces que se indique por parámetro
"Hola. ".repeat(2); // devuelve "Hola. Hola."
Método replace
Permite realizar reemplazos en una cadena a través de otra cadena o una expresión regular
"Hola mundo".replace(" mundo", ""); // devuelve "Hola"
"Palabra".replace(/a/ig, "0"); //devuelve "POlObrO"
Método search
Devuelve la posición de la primera aparición de la cadena proporcionada por parámetro
Aunque este método acepta Strings como parámetro. Lo que utiliza son expresiones regulares. Por esta razón, si se introduce un Stirng, será transformado de forma automática a una expresión regular.
"Hola mundo".search("mundo"); // devuelve 5
Método slice
Devuelve el fragmento de la cadena que esté comprendido entre las posiciones proporcionadas por parámetro
"Hola mundo".slice(0,4); // devuelve "Hola"
Método split
Devuelve un array con todos los fragmentos de cadena que resulten de dividir la cadena origen a través otra cadena o expresión regular proporcionada por parámetro
"Hola mundo".split(" ") ; // devuelve ["Hola", "mundo"]
Método startsWith
Devuelve un booleano que indica si la cadena empieza por el valor proporcionado por parámetro.
Acepta un segundo parámetro que indica dónde se debe empezar a realizar la búsqueda. Por defecto es 0.
"Hola mundo".starsWith("mundo"); //devuelve false
"Hola mundo".startsWith("mundo", 5); // devuelve true
Método substr
Devuelve un
"Hola mundo".substr(1,6); // devuelve "ola mu"
Método substring
Devuelve el fragmento de cadena que se encuentra entre las posiciones proporcionadas por los parametros
"Hola mundo".substring(1,6); // devuelve "ola m"
Método toLowerCase
Devuelve la cadena convertida a minusculas
"Hola mundo".toLowerCase(""); // Devuelve "hola mundo"
Método toUpperCase
Devuelve la cadena convertida a mayusculas
"Hola mundo".toUpperCase(""); //devuelve "HOLA MUNDO"
Método trim
Devuelve la cadena sin los espacios en blanco que puedan existir en los extremos
"Hola mundo ".trim(); // Devuelve "Hola mundo"
" Hola mundo ".trim(); // devuelve "Hola mundo"
Conversión de Strings
Además de poder realizar conversiones a través de su constructor, el tipo string también permite hacer conversiones mediante otras funciones como, por ejemplo, parseInt y parseFloat, las cuales permiten hacer transformaciones de tipo Stirngs a tipo numérico
parseInt("4") // devuelve 4
paserInte("hola") // devuelve NaN ( no es un numero)
parseInt("21 calles") // devuelve 21
parseInt("1e3") // devuelve 1
parseFloat("1.5") // Devuelve 1.5
parseFloat("1,5") // Devuelve 1
String(new Date()) // Devuelve la fecha actual en formato GMT
Formateado de Strings
Javascript dispone de varias opciones para formatear texto, desde construcciones a través de literales de cadena, hasta secuencias escapadas en hexadecimal o UniCode
/* literales de cadena */
"Esto es un literal de cadena"
"Esto es otro literal de cadena"
/* Secuencia escapada en hexadecimal */
"\x41" // Devuelve "A"
/* Secuencia escapada en Unicode */
"\u0041" //Devuelve "A"
Como se puede apreciar, los literales de cadena no tienen nada de especial, no obstante, el escapado puede ser interesante en varios ámbitos como, por ejemplo, en situaciones dónde se necesita mostrar símbolos especiales o iconos
En EcmaScripts 6 existe una forma adicional de escapar texto, mediante el uso de puntos de escape, Esta anotación permite que , cualquier carácter, pueda ser escapado utilizando valores hexadecimales comprendidos entre 0x000000 y 0x10FFF, o lo que es lo mismo 0 y 1048576. Además, resulta interesante porque evita tener que escribir códigos Unicode dobles.
console.log('u(1F440)', "\UD83D\UDC40");
La linea de código anterior, muestra el icono de ojos de Emoji de unicode ( ). La anotación de la izquierda está representada con codificación HTML Entity hexadecimal. La anotación de la derecha está representada con codificación C/C++/java
Todos los ejemplos anteriores representan valores en una única línea, sin embargo, también existe la posibilidad de trabajar en modo multilínea.
El modo multilínea se puede realizar de dos formas, con ayuda del símbolo de barra invertida, o a través de literales de plantilla
/* literales de cadena multilínea ( sólo con ES5.1 e inferiores) */
console.log('Nombre: Pablo\n\
Apellidos: Fernandez');
/*Literales de plantilla ( solo con ES6 o superiores) */
console.log('Nombre: Pablo
Apellidos: Fernandez');
Si ejecutamos estas lineas, podríamos comprobar que imprimen exactamente lo mismo, con la diferencia de que, la primera forma, funciona en todas las versiones de JavaScript, pero , la segunda sólo funciona en las últimas versiones de JavaScript. lo que no incluye Internet Explorer
Si ahora quisiéramos insertar una variable como parte de la expresión de cadena, en la primera forma tendríamos que «cortar» por el medio y establecer el nombre de la variable , es decir, la forma formal de toda la vida.
var nombre = 'Pablo';
console.log('Nombre: ' + nombre + '\n\
Apellidos: Fernandez');
Sin embargo, en la segunda forma, es posible hacerlo sin tener que «cortar» por medio. Esto es viable gracias a lo que se denomina la anotación «Syntactic Sugar», la cual se caracteriza porque el nombre de la variable va asignado entre llaves dentro de l mismo literal y eso facilita su lectura.
var nombre = 'Pablo';
console.log('Nombre: &{nombre}
Apellidos: Fernandez');
Fernadez Casado, Pablo (4º edicion) Domine Javascript 4º edicion, Ediciones Ra-ma