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

时间:2015-01-28 13:11:42

标签: javascript string immutability

由于字符串在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);

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

因为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);