Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Приведение первого символа к большому регистру (https://javascript.ru/forum/misc/47257-privedenie-pervogo-simvola-k-bolshomu-registru.html)

Александр222 16.05.2014 11:26

Приведение первого символа к большому регистру
 
Здравствуйте, подскажите пожалуйста, почему в данном примере не получается привести к верхнему регистру например второй символ из строки или всю строку?

Почему приводит только первый символ к верхнему регистру, даже при отсутствии параметров .charAt() (вторая строка) ?

function ucFirst(firstLetter){
	var newStr = firstLetter.charAt(0).toUpperCase();
	for(var i=1; i<firstLetter.length; i++) {
		newStr += firstLetter.charAt(i);
	}
	return newStr;
}

depp 16.05.2014 12:22

не проще ли так:
function ucFirst(firstLetter){
    return firstLetter.toUpperCase();
}

а в контексте данного примера в цикле for должно быть firstLetter.charAt(i).toUpperCase();
вместо firstLetter.charAt(i);

jsnb 16.05.2014 12:25

Цитата:

Сообщение от Александр222 (Сообщение 312015)
Здравствуйте, подскажите пожалуйста, почему в данном примере не получается привести к верхнему регистру например второй символ из строки или всю строку?

Может потому что в приведенном примере это нигде не написано? Или оно методом телепатии должно догадаться какой символ и к какому регистру ему надо приводить?

Цитата:

Сообщение от Александр222 (Сообщение 312015)
Почему приводит только первый символ к верхнему регистру, даже при отсутствии параметров .charAt() (вторая строка) ?

А что оно должно делать при отсутствии параметров в charAt? Символ на какой позиции искать? Если надо изменить регистр всей строки то и пиши strVar.toUpperCase()

Александр222 16.05.2014 15:25

Так если всю строку
return firstLetter.toUpperCase();

а запись
firstLetter.charAt(i).toUpperCase();

приводит к подобному ответу
"qwertWERT"
то есть вся строка сама по себе возвращается + с верхним регистром без первого символа.

Александр222 16.05.2014 15:29

Цитата:

Может потому что в приведенном примере это нигде не написано? Или оно методом телепатии должно догадаться какой символ и к какому регистру ему надо приводить?
Указаны параметры в .charAt(0) (вторая строка) которые относятся к определенному по счету символу, который следует привести к верхнему регистру, НО если указать в этих параметрах 1 или 3, не срабатывает, приводит к верхнему регистру 1й символ.
Почему?

depp 16.05.2014 16:14

function ucFirst(firstLetter,e){
    var newStr = '';
	for(var i=0; i<firstLetter.length; i++) {
		newStr += e==i ? firstLetter.charAt(i).toUpperCase() : firstLetter.charAt(i);
	}
	return newStr;
}
ucFirst('привет',1) // подразумевается вторая буква

Sweet 16.05.2014 17:58

Очень не эффективное решение в плане производительности. Есть тема делать нормально:
function rangeToUpperCase(string, from, to) {
  if (!to) to = from + 1;

  return string.slice(0, from) +
    string.slice(from, to).toUpperCase() +
    string.slice(to);
}

alert( rangeToUpperCase('test', 1) );

Александр222 17.05.2014 18:41

Цитата:

function ucFirst(firstLetter,e){
var newStr = '';
for(var i=0; i<firstLetter.length; i++) {
newStr += e==i ? firstLetter.charAt(i).toUpperCase() : firstLetter.charAt(i);
}
return newStr;
}
ucFirst('привет',1) // подразумевается вторая буква
Ясно, спасибо!

Цитата:

function rangeToUpperCase(string, from, to) {
if (!to) to = from + 1;

return string.slice(0, from) +
string.slice(from, to).toUpperCase() +
string.slice(to);
}
alert( rangeToUpperCase('test', 1) );
Со slice не сталкивался, не совсем ясно, дальше смотрю будет по учебнику.
Спасибо за ответ.


Часовой пояс GMT +3, время: 16:38.