2015-04-18 16 views
5
var nice = new String("ASH"); 
nice; //String {0: "A", 1: "S", 2: "H", length: 3, [[PrimitiveValue]]: "ASH"} 
var reverseNice = Array.prototype.reverse.call(nice); 
reverseNice.toString(); // "ASH" 

, podczas gdy oczekiwałem, że reverseNice będzie "HSA".new String() nie zachowuje się jak tablica jak obiekt

+0

'new String()' zwróci tylko ciąg znaków, nie ciąg pierwotny. Do tego użyj "". –

+1

@ hitman4890 daje ci coś bliższego temu, jak _JavaScript_ traktuje wszystkie _Strings_ wewnętrznie (dlatego możemy uzyskać dostęp do właściwości na nich, nawet jeśli są one prymitywne) –

Odpowiedz

8

Nie możesz wprowadzać zmian do nice, spróbuj;

nice[0] = 'f'; 
nice[0]; // "A" 

Jeśli chcesz użyć metody Array, konwertować je do prawdziwego Array pierwszy

var reverseNice = Array.prototype.slice.call(nice).reverse(); // notice slice 
reverseNice.join(''); // "HSA", notice `.join` not `.toString` 
+2

Tak, ciągi JavaScript są niezmienne. Zwróć też uwagę, że 'new String()' zwraca obiekt, a 'String()' zwraca typ pierwotny. –

0

Może to zrobić?

var nice = "ASH".split(""); 
nice; //Array {0: "A", 1: "S", 2: "H", length: 3} 
var reverseNice = nice.reverse(); 
reverseNice.join("").toString(); // "HSA" 

lub po prostu

var nice = "ASH".split(""); 
var reverseNice = nice.reverse().join("").toString(); 
+1

Jeśli użyjesz 'split()', to zwróci obiekt Array. Dlatego nie potrzebujesz 'Array.prototype.reverse.call (nice);'. Potrzebujesz tylko 'var reverseNice = nice.reverse()'. Nie potrzebujesz również 'toString()' po 'join', ponieważ' join' zwraca ciąg znaków. –

+0

Tak, już to naprawiłem. ;) –

0

użyć typu split i join przekonwertować z string do array, podobnie jak ten.

Powiązane problemy