JavaScript数组映射函数不会更改字符串中的元素?

时间:2014-12-09 12:53:46

标签: javascript

所以我尝试使用map()方法如下:

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"?!?

3 个答案:

答案 0 :(得分:2)

您尝试通过索引分配给特定位置的字符串,这是不可能的,因为字符串是不可变的。如果要更改字符串,则需要创建一个新字符串。

答案 1 :(得分: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()的目的是产生一组新的值,并保持原始值不受影响。

答案 2 :(得分:0)

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

字符串,数字,布尔值,空值,未定义,符号(ECMAScript 6中的新内容)是原始类型。