2014-12-09 47 views
1

所以我試圖用map()方法如下:JavaScript數組映射函數不會更改字符串中的元素嗎?

words = ["One", "Two"]; 
words = words.map(function(currentValue) 
    { 
     alert(currentValue[0]);//Output: O Then: T 
     currentValue[0] = "A"; 
     alert(currentValue[0]);//Output: O Then: T 
     return currentValue; 
    }); 

爲什麼是CurrentValue的[0]是沒有得到分配值 「A」?!?

+0

查看http://stackoverflow.com/questions/1431094/how-do-i-replace-a-character-at-a-particular-index-in-javascript – Peter 2014-12-09 12:58:05

回答

2

你試圖通過它的索引分配給特定位置的字符串,這是不可能的,因爲字符串是不可變的。如果你想改變一個字符串,你需要創建一個新的字符串。

+0

你能解釋一下alert(currentValue [0] )警告人物?我的意思是在這裏不可變的字符串被視爲一個數組? – 2014-12-09 13:01:31

+0

您可以*使用'string [pos]'語法讀取*,但不能*寫入字符串 - 如果您可以這樣做,您將擁有一個包含與創建的字符串不同的值的字符串,並且JavaScript不允許這種(不變性)。 – 2014-12-09 13:06:54

0

在JavaScript中String是原始類型,所以你不能改變它。

String,Number,Boolean,Null,Undefined,Symbol(ECMAScript 6中的新增)是原始類型。

+0

真的嗎?這是否意味着字符串不是一個對象?! – 2014-12-09 15:26:30

+0

這是正確的。 ''「instanceof Object'產生'false'。請參閱:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#Distinction_between_string_primitives_and_String_objects – JLRishe 2014-12-09 15:48:25

1

正如Alex K正確指出的那樣,字符串是不可變的,您不能修改它們。

由於您使用的是.map(),在這裏做的事情僅僅是建立一個新的字符串,返回:

var words = ["One", "Two"]; 

words = words.map(function (currentValue) { 
    return "A" + currentValue.substring(1); 
}); 

console.log(words); // outputs ["Ane", "Awo"]; 

作爲一個經驗法則,你不應該嘗試使用.map()修改現有值。 .map()的目的是生成一組新的值,並保留原始值不變。

+0

瞭解該經驗法則。謝謝 – 2014-12-09 15:27:22