如何解决 Javascript 中字符串的不变性问题?

How can I work around the immutability of a string in Javascript?

由于字符串在 Javascript 中是不可变的,我如何使用用户输入进行转换?

我试图使用将十六进制颜色代码的数字更改为十进制数字的函数,但被不可变的 属性 字符串卡住了。我尝试使用 "for" 将每个字符复制到一个数组,但新数组仍然无法操作。这是我尝试做的代码示例:

var user_input = prompt("Please enter an hexadecimal color code:","e.g. A876FF");

        var hexa_to_dec = function(hexa_code)/*changes each digit from hexadecimal to decimal*/

       {
        for(i = 0; i < hexa_code.length; i++)

            {
            if (isNaN(hexa_code[i]))

                {
                switch(hexa_code[i])

                    {
                    case "A" : hexa_code[i] = 10; break;
                    case "B" : hexa_code[i] = 11; break;
                    case "C" : hexa_code[i] = 12; break;
                    case "D" : hexa_code[i] = 13; break;
                    case "E" : hexa_code[i] = 14; break;
                    case "F" : hexa_code[i] = 15; break;
                    }

                }

            }

        document.write(hexa_code);
        }

    hexa_to_dec(user_input);

似乎应该有更简单的方法来做到这一点,例如将字符串操作的结果写回同一个变量

var user_input = prompt("Please enter an hexadecimal color code:","e.g. A876FF");

user_input = user_input.replace(/[ABCDEF]/g, function(x) {
    return {A:10,B:11,C:12,D:13,E:14,F:15}[x];
});

document.body.innerHTML = user_input;

FIDDLE

因为 hexa_code 是一个字符串并且是不可变的,所以你不能写回它,就像你在 switch 语句中尝试 hexa_code[i] = 10 一样。

创建一个新变量来存储您的结果。

在这里,查看下面的工作代码(也在 http://jsfiddle.net/legolandbridge/pn1t4jz1/

var user_input = prompt("Please enter an hexadecimal color 

    code:","e.g. A876FF");

    var hexa_to_dec = function(hexa_code) {

            var output = "";

            for(var i = 0, limit=hexa_code.length; i < limit; i++) {

                    switch(hexa_code[i]){ 
                        case "A" : output += 10; break;
                        case "B" : output += 11; break;
                        case "C" : output += 12; break;
                        case "D" : output += 13; break;
                        case "E" : output += 14; break;
                        case "F" : output += 15; break;
                        default: output += hexa_code[i];
                        }

                    }

            console.log(output);
            };

    hexa_to_dec(user_input);