-1

我有这个疑问,这段代码应该把单词中的第一个字符变成大写字母

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”以及未定义的内容。

现在我使用数组值尝试了完全相同的事情

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"

为什么会这样?

4

2 回答 2

1
str.str[0].toUpperCase();

应该只是

str[0].toUpperCase();

如果不是这种情况,您应该尝试console.log(str)找出到底str是什么,但我相信这是您的问题。

于 2013-09-02T18:12:53.887 回答
1

有用。将所有实例替换str.str[str[

它读出 undefined 因为你在对象上下文中调用你的字符串并试图引用一个 property str,它不是一个 property,因此undefinedString.str类对象上没有,您传递str.str的字符串对象(松散使用的对象)上也没有。


注意:我想补充一点,虽然进行替换会修复您的代码,但这并不是应用正确大小写转换的最佳方式。

于 2013-09-02T18:15:05.877 回答