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

String("Hello")Javascript string nesnesi readonly?

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

Bunun anlamı sadece Char en .split("") tarafından dizileri olarak Dizeleri kullanmak ve daha sonra .join("") olabilir mi?


CEVAP: Evet Javascript strings are readonly (aka değişmez) Bu, söz konusu burada cevaplanır:

+0

kullanmak new String ("Merhaba") sadece "Merhaba" neredeyse equivilant olmasıdır. Ekstra dizi yöntemleri vb. Yoktur ve sadece aynı yöntemlerle işlenebilir. http://www.w3schools.com/jsref/jsref_obj_string.o [] var @PlacidCow asp –

+0

ayrıntılı cevap için – TiansHUo

cevap

3

Strings evet çok, immutable vardır. Dizgiyi değiştirmek isterseniz a yeniden atanmalıdır. Ayrıca slice: a = 'j'+a.slice(1) veya replace: a = a.replace(/^h/i,'j')'u da kullanabilirsiniz.

this experiment gibi bir özel değişebilir String nesnesi oluşturabilirsiniz (özellikle, bkz. Yöntem replaceCharAt).

1

bunun bir dizi veya karakter sanki belki bazı prototipler yaratmak olduğunu, dizenizle üzerinde manipülasyonlar yapmak edebilmek için gerekirse: hellohbllohell

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

döner merhaba hbllo, cehennem, ehllo

+0

teşekkür rağmen bireysel karakterleri almak için, ama tüm cevaplarınız eskisinin yerine yeni bir dize kullanıyor, JavaScript dizeleri salt okunur olup olmadığını soruyordu. – TiansHUo

0

Strings prototipinin .valueOf() yöntemi ilkel değerini döndürmez mi? JavaScript içinde

enter image description here

+0

Tamam belki ben soruyu yanlış, sry – C5H8NNaO4

0

Temel tel gibi, bir ilk ve bir başka amacı, iki tip ayırt edilir. Dize nesneleri karakter dizileridir.

İlkel dize türünü kullanabilirsiniz. Görebildiğim tüm

var x = "hello"; 

    console.log(x); 

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

Ya da tüm yoğun amaçlar için

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