[Cookbook] JS 문자열 다루기


당분간 전에 구입한 책 2권(C#4.0, Javascript Cookbook)에 대한 내용(개인 테스트 및 내용 정리)으로 연재 포스트를 한번 진행할까 한다.


아마도 이번이 JS 와 C#에 대한 기초 정리는 마무리 될 듯 싶으며, 앞으로는 개인 프로젝트 및 언어에 대한 심화 과정 위주로 포스트를 진행해야 겠다는 계획을 갖고 있다.








그 첫 번째 시간으로 책(cookbook)의 Chapter 1. 과정인 "JS 문자열 다루기" 에 관해 정리해 보겠다.




Chapter 1. JS 문자열 다루기



JS 문자열은 원시 데이터 자료형(Number(int, float), Boolean(true, false), null(empty literal), undefined(not defined)) 중 가장 사용 빈도가 높은, 데이터 자료형이자 객체이다.





1. 표현


작은 따옴표('')와 큰따옴표("") 사용에 대한 규칙은 따로 존재하지 않지만, 아래 코드에서 처럼 HTML 작성 시 태그의 Attribute Wrapping은 큰 따옴표가 기본이므로 일일이 이스케이프(\\)를 사용하지 않기 위해 작은 따옴표를 기본으로 하는 것이 좋다.






2. String 객체:


2.1. "String 객체"는 String 생성자 함수와 new 연산자를 통해 생성되며, 객체 맴버에 접근할 수 있다.


2.2.  new 연산자를 사용하지 않고 String 함수 호출 시 객체는 생성되지 않으며, 문자열 리터럴을 생성한다.


2.3. "문자열 리터널"에서 객체(String) 맴버 접근 시 JS 엔진은 즉시 String 객체를 만들어 해당 문자열 리터널을 Wrapping 시킨 후 메서드를 호출한다. 또한, 메서드 종료 시 자동 생성된 String 객체를 소멸 시킨다.


2.4 String 객체 사용 시기는 메서드 접근 유/무에 따라 달라진다. 즉, 메서드 접근 시에는 생성된 객체에 직접 접근하는 것이 보다 효율적이며, 그 반대의 경우 리터럴을 사용하는것이 바람직하다.(객체 메서드 접근이 없는 문자열(실제 코딩 시 이같은 경우는 사실상 제로에 가깝다.))



3. + 연산자를 활용해 문자열 합치기

"더하기 연산(+)" 사용 시 JS 엔진에서 자동 변환(문자열이 아닌 타입)되는 동작을 무시하도록 작성하는 것이 가장 효과적이다. 즉, 자동 변환없는 문자열 타입끼리만 더하기 연산자를 통해 문자열을 연결해준다.







4. 문자열과 다른 자료형 합치기:

- 문자열에 다른 자료형을 더할 시 JS 엔진은 다른 자료형(object, Boolean, Number 등)의 값을 문자열로 변환 후 문자열 합치기를 수행합니다. 또한, 자동 자료형 변환은 String 객체와 문자열 리터럴을 합칠 때도 발생합니다.




5. 문자열 비교하기:

5.1. (동|부)등 연산자(==, !=)를 통한 문자열 비교 시 자료형 합치기와 마찬가지로 JS 엔진은 다른 자료형의 값을 문자열로 변환 후 비교한다.

5.2. 엄격한 (동|부)등 연산자(===, !==)를 사용 후 데이터 값 비교 시 자동 자료형 변환을 무시할 수 있다. 즉, 해당 데이터 값의 자료형 까지 엄격히 비교한다.

5.3. 비교 시 대소문자를 구분한다.

5.4. 비교 연산자는 보통 숫자값을 산술 비교하지만 문자열을 알파벳순으로 비교하기도 한다.

5.5. String.localCompare() 메서드를 활용한 비교 연산이 가능하다.






6. 문자열에서 부분 문자열 검색하기





8. 문자열이 존재하는지 또는 빈 문자열인지 확인하기




위 코드에서처럼 문자열 여부를 typeof 연산자를 통해 판단할 경우 String 객체는 'object'를 반환하여 예상치 못한 결과가 나올 수 있다.

이 같은 경우 객체가 무엇이든 원시 자료형을 반환해주는 메서드인 Object.valueOf를 사용할 수 있다.




9. 키워드 문자열을 여러 개의 키워드로 나누기

10. 특수 문자 삽입하기

11. textarea를 줄별로 처리하기

12. 문자열 끝 공백 제거하기