[英]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.