Pregunta ¿Cómo puedo hacer que la primera letra de una cadena sea mayúscula en JavaScript?


¿Cómo puedo hacer mayúscula la primera letra de una cadena, pero no cambiar el caso de ninguna de las otras letras?

Por ejemplo:

  • "this is a test" -> "This is a test"
  • "the Eiffel Tower" -> "The Eiffel Tower"
  • "/index.html" -> "/index.html"

2960
2018-06-22 08:25


origen


Respuestas:


function capitalizeFirstLetter(string) {
    return string.charAt(0).toUpperCase() + string.slice(1);
}

Algunas otras respuestas se modifican String.prototype (esta respuesta solía también), pero desaconsejaría esto ahora debido a la capacidad de mantenimiento (es difícil saber dónde se está agregando la función al prototype y podría causar conflictos si otro código usa el mismo nombre / un navegador agrega una función nativa con el mismo nombre en el futuro).


4721
2018-06-22 08:30



Un enfoque más orientado a objetos:

String.prototype.capitalize = function() {
    return this.charAt(0).toUpperCase() + this.slice(1);
}

Y entonces:

"hello world".capitalize();  =>  "Hello world" 

1194
2017-07-20 15:51



En CSS:

p:first-letter {
    text-transform:capitalize;
}

408
2017-07-17 14:06



Aquí hay una versión abreviada de la respuesta popular que obtiene la primera letra al tratar la cadena como una matriz:

function capitalize(s)
{
    return s[0].toUpperCase() + s.slice(1);
}

Actualizar:

De acuerdo con los comentarios a continuación, esto no funciona en IE 7 o inferior.

Actualización 2:

Para evitar undefined para cuerdas vacías (ver @ njzk2's comment below), puedes verificar si hay una cadena vacía:

function capitalize(s)
{
    return s && s[0].toUpperCase() + s.slice(1);
}

235
2017-08-28 23:03



Si está interesado en el rendimiento de algunos métodos diferentes publicados:

Aquí están los métodos más rápidos basados ​​en esta prueba jsperf (ordenado de más rápido a más lento).

Como puede ver, los primeros dos métodos son esencialmente comparables en términos de rendimiento, mientras que la alteración del String.prototype es de lejos el más lento en términos de rendimiento.

// 10,889,187 operations/sec
function capitalizeFirstLetter(string) {
    return string[0].toUpperCase() + string.slice(1);
}

// 10,875,535 operations/sec
function capitalizeFirstLetter(string) {
    return string.charAt(0).toUpperCase() + string.slice(1);
}

// 4,632,536 operations/sec
function capitalizeFirstLetter(string) {
    return string.replace(/^./, string[0].toUpperCase());
}

// 1,977,828 operations/sec
String.prototype.capitalizeFirstLetter = function() {
    return this.charAt(0).toUpperCase() + this.slice(1);
}

enter image description here


134
2017-11-14 03:26



Para otro caso lo necesito para poner en mayúscula la primera letra y minúsculas para el resto. Los siguientes casos me hicieron cambiar esta función:

//es5
function capitalize(string) {
    return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
}
capitalize("alfredo")  // => "Alfredo"
capitalize("Alejandro")// => "Alejandro
capitalize("ALBERTO")  // => "Alberto"
capitalize("ArMaNdO")  // => "Armando"

// es6 using destructuring 
const capitalize = ([first,...rest]) => first.toUpperCase() + rest.join('').toLowerCase();

128
2017-07-19 18:17



Aquí están las mejores soluciones:

Primera solución En CSS:

p {
  text-transform: capitalize;
}

Segunda solución :

function capitalizeFirstLetter(string) {
    return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
}

También podría agregarlo a la String.prototype para que pueda encadenarlo con otros métodos:

String.prototype.capitalizeFirstLetter = function() {
    return this.charAt(0).toUpperCase() + this.slice(1).toLowerCase();
}

y úsalo así:

'string'.capitalizeFirstLetter() // String

Tercera solución:

function ucFirstAllWords( str )
{
    var pieces = str.split(" ");
    for ( var i = 0; i < pieces.length; i++ )
    {
        var j = pieces[i].charAt(0).toUpperCase();
        pieces[i] = j + pieces[i].substr(1).toLowerCase();
    }
    return pieces.join(" ");
}

106
2018-02-16 05:30



var string = "hello world";
string = string.charAt(0).toUpperCase() + string.slice(1);
alert(string);

62
2017-07-17 06:23