Строковый объект JavaScript только для чтения?

a=new String("Hello");

Строка (Привет)

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

Означает ли это, что я могу использовать строки как массивы символов только .split(""), а затем .join("")?


ОТВЕТ: Да, в Javascript strings are readonly (он же неизменяемый) Ответ на этот вопрос можно найти здесь:


person TiansHUo    schedule 21.09.2012    source источник
comment
для всех интенсивных целей, все, что я вижу, это то, что new String (hello) практически эквивалентен просто hello. Он не имеет дополнительных методов массива и т. Д., И им можно управлять только с помощью тех же методов. w3schools.com/jsref/jsref_obj_string.asp   -  person C..    schedule 21.09.2012
comment
@PlacidCow у него есть [], чтобы получить отдельные символы, хотя   -  person TiansHUo    schedule 24.09.2012


Ответы (5)


Строки неизменяемы, так что да. a следует переназначить, если вы хотите изменить строку. Вы также можете использовать slice: a = 'j'+a.slice(1) или replace: a = a.replace(/^h/i,'j').

Вы можете создать собственный изменяемый объект String, что-то вроде этого эксперимента (особенно см. Метод replaceCharAt).

person KooiInc    schedule 21.09.2012

Это правильно.

Конечно, вы можете создать функцию, которая справится с этим за вас.

См. Этот пост SO для различных примеров этого:

Как заменить символ в конкретный индекс в JavaScript?

person Curt    schedule 21.09.2012

Если необходимо иметь возможность выполнять манипуляции с вашей строкой, как если бы это был массив или символы, вы, возможно, создаете несколько прототипов:

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

person C..    schedule 21.09.2012
comment
Спасибо за подробный ответ, но я спрашивал, доступны ли строки Javascript только для чтения, все ваши ответы используют новую строку, чтобы заменить старую. - person TiansHUo; 24.09.2012

не вернет ли метод .valueOf () прототипа Strings свое примитивное значение? Нравится,

введите описание изображения здесь

person Moritz Roessler    schedule 21.09.2012

В основном строки в 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);
person kannanrbk    schedule 21.09.2012