본문으로 바로가기

[JavaScript]값 - 1.2 문자열

category Language/JavaScript 2020. 7. 24. 12:49

문자열

자바스크립트 문자열은 실제로 생김새만 비슷하지, 문자 배열과 같지 않다.

 

var a = "abc";
var b = ["a","b","c"];

//배열과 마찬가지로 문자열도 length, indexOf(),concat() 메서드를 사용할 수 있다.
console.log(a.length);	//3
console.log(b.length);	//3

console.log(a.indexOf("b")); //1
console.log(b.indexOf("b")); //1

var c = a.concat("eng"); // "abceng"
var d = b.concat("eng"); // ["a","b","c","e","n","g"]

위의 예시만 봤을때는 문자의 배열이라고 이해할수 있으나, 문자열불변 값, 배열가변 값 이다.

문자열 메서드는 새로운 문자열을 생성한 후 반환한다. 반면 배열 메서드는 그 자리에서 원소를 변경한다.

그러므로 문자열에 대부분의 배열 메서드는 사용할 수 없으나, 문자열에 대한 불변 배열 메서드를 빌려쓰기는 가능하다.

 

var a = "test";

console.log(a.join);  //undefined
console.log(a.map);   //undefined

//불변 배열 메서드
var c = Array.prototype.join.call( a, "_");
var d = Array.prototype.map.call(a, function(v){
    return v.toUpperCase()+".";
}).join( "" );

console.log(c);//"t_e_s_t"
console.log(d);//"T.E.S.T."

//문자열 거꾸로 뒤집기, 가변 배열 메서드라 사용 불가
console.log(Array.prototype.reverse.call(a)); //TypeError

reverse같은 경우에는 call을 통해서도 사용이 불가능 한데, 아래와 같은 꼼수로는 해결이 가능하다.

 

단, 복잡한 문자(유니코드,특수문자 등등) 이 섞여있다면 라이브러리 유틸이 필요하다. ex:에스레베르)

//1) 'a'를 문자의 배열로 분할
//2) 문자 배열의 순서를 reverse처리
//3) 문자배열을 합쳐 다시 문자열로 돌린다.
var e = a.split("").reverse().join("");
console.log(e); // "tset"

 

정리

문자열에서는 왠만한 함수는 Array.prototype.call()을 통해 배열 메서드가 사용 가능하다.

다만 가변 배열 메서드인 reverse()의 경우에는 사용 불가하다.

 

배열을 문자열로 표현할때는 join("") 메서드를 활용하자.