Javascript字符串对象只读?

时间:2012-09-21 09:46:39

标签: javascript string readonly

a=new String("Hello");

String("Hello")

a[0]==="H" //true
a[0]="J"
a[0]==="J" //false
a[0]==="H" //true

这是否意味着我只能在.split("")然后.join("")使用字符串作为字符数组?


答案:是的,在Javascript strings are readonly(又名不可变)这个问题的答案如下:

5 个答案:

答案 0 :(得分:3)

多数民众赞成。

你当然可以构建一个函数来为你处理这个问题。

有关此的不同示例,请参阅此SO帖子:

How do I replace a character at a particular index in JavaScript?

答案 1 :(得分:3)

字符串是immutable,是的。如果要更改字符串,则应重新分配a。您还可以使用slicea = 'j'+a.slice(1)replacea = a.replace(/^h/i,'j')

您可以创建自定义的可变String对象,例如this experiment(尤其是方法replaceCharAt)。

答案 2 :(得分:1)

如果有必要对字符串执行操作,就好像它是一个数组或字符,那么您可能会创建一些原型:

String.prototype.splice = function(start,length,insert) {
    var a = this.slice(0, start);
    var b = this.slice(start+length, this.length);
    if (!insert) {insert = "";};
    return new String(a + insert + b);
};

String.prototype.push = function(insert) {
    var a = this
    return new String(a + insert);
};

String.prototype.pop = function() {
    return new String(this.slice(0,this.length-1));
};

String.prototype.concat = function() {
    if (arguments.length > 0) {
        var string = "";
        for (var i=0; i < arguments.length; i++) {
            string += arguments[i];
        };
        return new String(this + string);
    };
};

String.prototype.sort = function(funct) {
    var arr = [];
    var string = "";
    for (var i=0; i < this.length; i++) {
        arr.push(this[i]);
    };
    arr.sort(funct);
    for (var i=0; i < arr.length; i++) {
        string += arr[i];
    };
    return new String(string);
};

var a = new String("hello");
var b = a.splice(1,1,"b");
var c = a.pop();
var d = a.concat(b,c);
var e = a.sort();

返回你好, hbllo, 地狱,hellohbllohell,ehllo

答案 3 :(得分:0)

Strings原型的.valueOf()方法不会返回其原始值吗? 像,

enter image description here

答案 4 :(得分:0)

基本上javascript中的字符串由两种类型区分,一种是原始的,另一种是对象。字符串对象是字符序列。

您可以使用原始类型的字符串。

   var x = "hello";

   console.log(x);

     output : "hello"
    x = "j"+x.substring(1);
    console.log(x);
    output : "jello";

或使用

  var x = new String("hello");
  console.log(x.toString());
  x = "j"+x.substring(1);