#javascript #string
Вопрос:
У меня есть функция
String.prototype.capitalize = function() {
return this.charAt(0).toUpperCase() this.slice(1);
}
Где мне нужно адаптировать это, чтобы вернуть «» (пустая строка)
"".capitalize must return ""
undefined.capitalize must return ""
null.capitalize must return ""
Я пробовал с
String.prototype.capitalize = function() {
return this.charAt(0).toUpperCase() this.slice(1) || "";
}
но для неопределенного я получаю ошибку:
Uncaught TypeError: Cannot read property 'capitalize' of undefined at <anonymous>:1:6
Комментарии:
1. Вы хотите использовать 1-й символ с большой буквы ?
2.
undefined.capitalize
илиnull.capitalize
никогда не сможет работать. Для них вам придется использовать функцию вместо метода-прототипа. В качестве альтернативы, если вы используетеString.prototype.capitalize.call(undefined)
иString.prototype.capitalize.call(null)
, вы можете использоватьreturn (this || "").charAt(0).toUpperCase() this.slice(1)
. Подумайте??
вместо||
этого . Имейте в виду, что расширение собственных прототипов не рекомендуется.3. Я согласен с @SebastianSimon.
undefined.capitalize
не должно быть ничего особенного. Если вы используете какую-либо функциюundefined
илиnull
она вернет: «Ошибка ввода: неопределенная не имеет свойств».4. вы вызываете прототип строки для null и undefined. Но null и undefined не являются строковыми типами. Если вы хотите достичь желаемого результата, просто создайте функцию, которая это делает.
Ответ №1:
null и undefined не являются строковыми типами, поэтому вы всегда будете получать ошибку типа. ваш подход не сработает. Но вы можете создать функцию, которая делает это
function capitalize(str){
if(str === null || str === undefined ){return ""}
else {return str = str[0].toUpperCase() str.slice(1)}
}
let str1 = null
let str2 = undefined
let str3 = "abc"
console.log(capitalize(str1))
console.log(capitalize(str2))
console.log(capitalize(str3))
Комментарии:
1. Вы не получаете ошибку TypeError, потому
null
что иundefined
не относятся к типу String; вы получаете ошибку, потому что чтение свойств изnull
иundefined
невозможно.2. @SebastianSimon да. правильный. Моя формулировка была не самой точной, но именно это я и имел в виду.
Ответ №2:
Я счел это полезным ответом.
function capitalize(l){return null==l?"":null==l?"":l.charAt(0).toUpperCase() l.slice(1)}
Комментарии:
1. Почему
null==l?"":
повторяется?
Ответ №3:
Если this.length
больше 0, вы возвращаетесь ""
.
String.prototype.capitalize = function() {
return (this.length > 0) ? this.charAt(0).toUpperCase() this.slice(1) : "";
}
console.log(typeof "test string".capitalize(), ":", "test string".capitalize());
console.log(typeof "".capitalize(), ":", "".capitalize());
Комментарии:
1. Это не касается
null
илиundefined
вообще не касается.