-1

私はプログラミングに不慣れで、LearnStreetの「書き込み関数」に取り組んでいます。私の質問は次のとおりです。

function capitalizeFirst(str) {
    return str.charAt(0).toUpperCase() + str.slice(1);
}

それがただだったら私はそれを得る:

return str.charAt(0).toUpperCase();

最初の文字だけが返され、大文字になりますが、追加すると.slice(1)文字列全体が返されるのはなぜですか?

の場合:

capitalizeFirst("i am apple");
// "I am apple" is returned

しかし、

function capitalizeFirst(str) {
    return str.charAt(0).toUpperCase() + str.slice(0); // 0 instead of 1
}

capitalizeFirst("i am apple");
// "Ii am apple" is returned

この質問に対するヘルプ/ガイダンスを事前に感謝します。

4

3 に答える 3

4

str.slice(x, y)xindexとindexの間にある文字列の文字を返しますy
渡さない場合y(渡さない場合)、デフォルトで文字列の最後になります。

したがって、str.slice(1)インデックスから始まる文字列内のすべての文字を返します1
インデックスはゼロベースなので、最初の文字以外のすべてを意味します。

于 2012-12-31T16:36:24.170 に答える
0

スライス(1)は、文字列の残りの部分、つまり最初の文字の後のすべてを返します。したがって、最初の文字(大文字)と残りの文字列を足し合わせることで、文字列全体を取得できます。

于 2012-12-31T16:37:29.150 に答える
0

あなたの混乱は当然です。ほとんどすべてのプログラマーは、人生のある時点で1つのエラーを犯します。それで、例を使ってそれをあなたに説明します:

文字列を考えてみましょう"Hello World!"。コンピュータでは、メモリ内で文字の配列として表されます。次のようになります。

+---+---+---+---+---+---+---+---+---+---+---+---+
| H | e | l | l | o |   | W | o | r | l | d | ! |
+---+---+---+---+---+---+---+---+---+---+---+---+
0   1   2   3   4   5   6   7   8   9  10  11  12

ここで、ボックス(文字)は12個だけですが、インデックス(0to 12)は13個あることに注意してください。インデックスは文字の間にあります。

注:最後のインデックスは常に配列の長さです。

プログラマーが犯すよくある間違いは、配列について考えるとき、インデックスではなくボックスの観点から考えるということです。

重要:配列は、ボックスの数ではなく、インデックスの観点から記述されます。

sliceそれでは、メソッドを見てみましょう。このメソッドは2つのインデックスを取り、2番目のインデックスはオプションです。指定された文字列のサブ文字列を返します。

たとえば、必要な場合は、次のように抽出します("World"インデックスで開始し、インデックスで終了します)。"Hello World!""World"611

"Hello World!".slice(6, 11); // "World"

スペースの後にすべてが必要な"Hello World!"場合(つまり、必要な場合"World!")、の代わりに短い形式を使用できますslice(6, 12)。ここでは12が暗示されているので、単純に使用できますslice(6)

"Hello World!".slice(6); // "World!"

文字列の長さを知らなくても、負のインデックスを使用して文字列の最後の文字を抽出することもできます。

"Hello World!".slice(-1); // "!"

ここ-1はインデックスを表しますlength - 1lengthは最後のインデックスとして定義されているので12 - 1、この場合は単純です。したがって、インデックスの後のすべてを返します11

了解した?これで、フェンスポストの問題を理解できました。

これが、呼び出したときに文字列全体をそのまま取得する理由ですslice(0)。を呼び出すと、最初の文字以降のすべてが表示されますslice(1)

配列を扱うときは、ボックスではなくインデックスの観点から考えることを常に忘れないでください。

文字の間に読みます。

于 2012-12-31T17:11:13.793 に答える