我有这个疑问,这段代码应该将单词中的第一个字符变为大写
function ucFirst(str) {
var newStr = str.charAt(0).toUpperCase();
for (var i = 1; i < str.length; i++) {
newStr += str.charAt(i);
}
return newStr
}
alert(ucFirst("john"));
这将打印出“John”以及控制台中的undefined。
现在我尝试使用数组值完全相同的东西
function ucFirst(str) {
var newStr = str.str[0].toUpperCase();
for (var i = 1; i < str.length; i++) {
newStr += str.str[i];
}
return newStr;
}
alert(ucFirst("john"));
我在控制台"Cannot read property '0' of undefined"
为什么会这样?
答案 0 :(得分:1)
str.str[0].toUpperCase();
应该只是
str[0].toUpperCase();
如果情况并非如此,您应该尝试console.log(str)
并找出str
到底是什么,但我相信这是您的问题。
答案 1 :(得分:1)
有效。将str.str[
的所有实例替换为str[
它读取未定义因为您在对象上下文中调用字符串并尝试引用属性str
,该属性不是属性,因此undefined
。类对象上没有String.str
,你传递的字符串 object (松散地使用的对象)上也没有str.str
。
注意:我想补充说,在进行替换时修复您的代码,这不是应用正确版本转换的最佳方式。