2012-12-31 24 views
-1

我是編程新手,我正在學LearnStreet的「Writing functions」。 我的問題是有以下幾點:Javascript .slice方法(更深入的瞭解)

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 

感謝。

+1

[String.slice的文檔](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/slice),不要與[Array.slice]混淆( https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/slice)。 – jbabey

回答

0

你的困惑是很自然的。幾乎每個程序員在他們的生活中都會有一個off by one error。所以我會用例子向你解釋:

考慮字符串"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箱(人物),但13個指數(012)。指數位於字符之間。

注意:最後一個索引始終是數組的長度。

程序員犯的一個常見錯誤是,當他們想到一個數組時,他們認爲這些數組是根據框而不是索引來表示的。

重要提示:數組是用索引來描述的,而不是盒子的數量。

現在讓我們看看slice方法。這個方法有兩個索引,第二個是可選的。它返回給定字符串的子字符串。

例如,如果我只是想"World""Hello World!"我會抽出像這樣(在指數6"World"開始,並在指數11結束):如果我在"Hello World!"空間後想要的一切

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

(即如果我想"World!"),那麼我可以使用一個簡短的形式,而不是slice(6, 12)。在這裏,12是隱含的,所以我可以簡單地使用slice(6)

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

我甚至可以使用負的索引來提取說字符串的最後一個字符不知道字符串的長度:

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

這裏的-1代表索引length - 1。由於length被定義爲最後一個索引,因此在這種情況下僅爲12 - 1。因此,它將返回索引11後面的所有內容。

瞭解了嗎?所以現在你瞭解fencepost問題。

這就是爲什麼當你撥打slice(0)時,你會得到整個字符串;當你打電話給slice(1)時,你的第一個字符後的所有內容。

一定要記住在處理數組時要考慮索引而不是盒子。

閱讀字符之間。

+0

非常感謝Aadit抽出時間來完全解釋我的問題,我現在更全面地理解它,我會把它放在我的頭上。 , 謝謝!! –

4

str.slice(x, y)將返回位於索引x和索引y之間的字符串的字符。
如果你沒有通過y(你不知道),它默認爲字符串的末尾。

因此,str.slice(1)將返回從索引1開始的字符串中的所有字符。
由於索引是從零開始的,這意味着除第一個字符外的所有內容。

+0

ahhhh!我看到謝謝! charAt添加第一個字母,而.slice放在其餘的。謝謝SLaks(= –

0

slice(1)返回字符串的其餘部分,第一個字符後的所有內容。因此,通過將第一個字母(大寫)和字符串的其餘部分相加來得到整個字符串。

+0

)謝謝jfrank!(= –