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).
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"
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.