Jak sprawić, by pierwsza litera ciągu znaków była wielka w JavaScript?

Jak sprawić, aby pierwsza litera ciągu znaków była wielka, ale nie zmieniać wielkości pozostałych liter?

Na przykład:

  • "to jest test" -> "To jest test".
  • "Wieża Eiffla" -> "Wieża Eiffla" -> "Wieża Eiffla"
  • "/index.html" -> "/index.html"
function capitalizeFirstLetter(string) {
    return string.charAt(0).toUpperCase() + string.slice(1);
}

Niektóre inne odpowiedzi modyfikują String.prototype (ta odpowiedź również kiedyś to robiła), ale odradzam to teraz ze względu na utrzymanie (trudno się dowiedzieć, gdzie funkcja jest dodawana do prototypu i może powodować konflikty, jeśli inny kod używa tej samej nazwy / przeglądarka dodaje natywną funkcję o tej samej nazwie w przyszłości).

Komentarze (32)

Oto podejście bardziej zorientowane na obiekt:

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

Wywołałbyś funkcję, na przykład tak:

"hello world".capitalize();

Z oczekiwanym wynikiem wyjściowym:

"Hello world" 
Komentarze (21)

Tutaj jest funkcja o nazwie ucfirst() (skrót od "pierwsza wielka litera"):

function ucfirst(str) {
    var firstLetter = str.substr(0, 1);
    return firstLetter.toUpperCase() + str.substr(1);
}

Możesz napisać wielką literę w ciągu znaków, wywołując ucfirst("jakiś ciąg znaków") -- na przykład,

ucfirst("this is a test") --> "This is a test"

Działa to poprzez podzielenie łańcucha na dwie części. W pierwszym wierszu wyciąga firstLetter, a następnie w drugim wierszu kapitalizuje firstLetter przez wywołanie firstLetter.toUpperCase() i łączy go z resztą łańcucha, który jest znaleziony przez wywołanie str.substr(1).

Można by pomyśleć, że to zawiedzie w przypadku pustego łańcucha i rzeczywiście w języku takim jak C trzeba by się tym zająć. Jednak w JavaScript, kiedy bierzesz podłańcuch pustego łańcucha, po prostu otrzymujesz pusty łańcuch z powrotem.

Komentarze (4)