2012-09-21 17 views
5
a=new String("Hello"); 

String("Hello")Obiekt tekstowy JavaScript tylko do odczytu?

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

Czy to oznacza, że ​​można używać tylko ciągi jako tablice char poprzez .split("") a następnie .join("")?


ODPOWIEDŹ: Tak, w Javascript strings are readonly (aka niezmiennej) To pytanie jest tu odpowiedzi na:

+0

dla wszystkich intensywnej celów, na wszystko, co mogę zobaczyć, że new String ("Hello") jest praktycznie equivilant po prostu "cześć". Nie ma żadnych dodatkowych metod tablicowych itp. I można nimi manipulować tylko tymi samymi metodami. http://www.w3schools.com/jsref/jsref_obj_string.asp –

+0

@PlacidCow ma [], aby uzyskać indywidualne znaki, ale – TiansHUo

Odpowiedz

3

Struny są immutable, więc tak. a należy ponownie przypisać, jeśli chcesz zmienić ciąg znaków. Można również użyć slice: a = 'j'+a.slice(1) lub replace: a = a.replace(/^h/i,'j').

Można utworzyć niestandardowy zmienny obiekt String, podobnie jak this experiment (szczególnie metoda replaceCharAt).

1

Jeśli jest to konieczne, aby móc wykonywać manipulacje na ciąg tak, jakby była tablicą lub znaków, które może stworzyć kilka prototypów:

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(); 

zostaje przywrócone Cześć, hbllo, piekło, hellohbllohell , ehllo

+0

Dzięki za szczegółową odpowiedź, ale pytałem, czy ciągi JavaScript były tylko do odczytu, wszystkie twoje odpowiedzi używają nowego ciągu do zastąpienia starego. – TiansHUo

0

czy metoda .valueOf() prototypu Strings nie zwróci swojej pierwotnej wartości? Jak,

enter image description here

+0

ok może źle zrozumiałem pytanie, sry – C5H8NNaO4

0

Zasadniczo ciąg w javascript rozróżnia dwa rodzaje jeden jest prymitywny, a inny jest przedmiot. Obiekty typu String to sekwencje znaków.

Można użyć typu podstawowego.

var x = "hello"; 

    console.log(x); 

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

Albo użyć

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