簡體   English   中英

每個單詞的首字母大寫使用

[英]Capitalize the first letter of each word using

我本學期正在使用javascript上課,本周的練習之一是采用一串單詞,並大寫每個單詞的第一個字母。 我使用.map()做到了,代碼在這里:

 let t1 = "hello how are you doing".split(" "); let t2 = t1.map(function(word) { return word[0].toUpperCase() + word.slice(1); }); console.log(t2.join(" ")); 

而且效果很好。 但是,我想知道為什么當我嘗試使用forEach() ,無法使其正常工作。 這是我的代碼:

 let t1 = "hello how are you doing".split(" "); t1.forEach(function(word) { word[0] = word[0].toUpperCase(); }) console.log(t1.join(" ")); 

我對forEach()理解是,它遍歷表的每個元素,就像一個簡單的for循環。 因此,我的代碼難道不應該將每個單詞的第一個字母替換為toUpperCase()應用到的相同字母嗎?

編輯:我已經知道如何大寫每個單詞的第一個字母,我只是在問不同的方法

 let word = 'foo'; word[0] = 'F'; console.log(word); 

不需要修改word ,因為字符串是不可變的。 您不能在字符串中更改單個字符。

對於使用括號符號的字符訪問,嘗試刪除或為這些屬性分配值將不會成功。 所涉及的屬性既不可寫也不可配置。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String

首先,JS中的字符串是不可變的。

 var str = 'hello World'; str[0] = 'H'; console.log(str) 

因此word[0] =不會有任何效果。

其次,即使是更新,也要更新參數變量的值,而不是數組中的值。

 var a = [1, 2, 3]; a.forEach(function(n) { n = n * 2; }); console.log(a) 

根據與@ deceze的討論,這一點是不正確的。

如果字符串是可變的,那會很好用。 您的“第二個”實際上並不適用。 降低


@deceze對象是使用引用分配的,因此它將起作用。 使用值分配原始值。 因此,根據我的理解,n始終是數組中項目的副本。 與之相關的任何操作都不應影響數組中的項目。 我提到過字符串是原始值。 另外,我想不出具有屬性並且是原始類型的任何變量。 如果您有任何想法,請告訴我。 很高興學習。 :-) – 拉傑什


當然,您是對的。 這就是為什么我首先要說的是可變的……因為不是,所以無論如何都沒有意義。 降低


為了獲得理想的效果,您將不得不覆蓋數組中的值。

 let t1 = "hello how are you doing".split(" "); t1.forEach(function(word, index) { t1[index] = word[0].toUpperCase() + word.substring(1); }) console.log(t1.join(" ")); 

參考:

因此,我的代碼難道不應該將每個單詞的第一個字母替換為toUpperCase()應用到的相同字母嗎?

因為word是原始值,所以當您將新值設置為word ,它不會將引用帶回到數組中。

但是,如果forEach參數不是原始值,則原始值會發生突變,請參見下面的演示

 var arr = [[1,2,3],[4,5,6],[7,8,9]]; arr.forEach(function(item){ item.push(1); }) console.log(arr); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM