JavaScript 입문 | 표준 객체 | String 객체

자바스크립트에서의 문자열 표현

자바스크립트에서 문자열 리터럴은 큰따옴표("")나 작은따옴표(’’)를 사용하여 손쉽게 만들 수 있다.

var firstStr = "이것도 문자열이다.";      // 큰따옴표를 사용한 문자열
var secondStr = '이것도 문자열이다.';     // 작은따옴표를 사용한 문자열
var thirdStr = "나의 이름은 '홍길동'이야."  // 작은따옴표는 큰따옴표로 둘러싸인 문자열에만 포함될 수 있음.
var fourthStr = '나의 이름은 "홍길동"이야.' // 큰따옴표는 작은따옴표로 둘러싸인 문자열에만 포함될 수 있음.

문자열의 길이

자바스크립트에서 문자열의 길이는 length 프로퍼티에 저장된다.

var strKor = "한글";
var strEng = "abcABC";
strKor.length; // 2
strEng.length; // 6

오랫동안 사용되어 온 아스키(ASCII) 인코딩 환경에서 영문자는 한 글자당 1바이트, 한글은 한 글자당 2바이트로 표현된다.
하지만 UTF-8 인코딩 환경에서는 영문자는 한 글자당 1바이트, 한글은 한 문자당 3바이트로 표현된다.

자바스크립트의 length 프로퍼티는 해당 문자열의 총 바이트 수를 저장하는 것이 아닌 글자의 개수만을 저장한다.

이스케이프 시퀀스(escape sequence)

자바스크립트는 더욱 다양한 문자 표현을 위해 여러 가지 이스케이프 시퀀스(escape sequence) 방식을 제공한다. 자바스크립트에서 제공하는 이스케이프 시퀀스 방식은 다음과 같다.

  1. 16진수 이스케이프 시퀀스(hexadecimal escape sequence)
  2. 유니코드 이스케이프 시퀀스(unicode escape sequence)
  3. 유니코드 코드 포인트 이스케이프(unicode code point escape)

// 16진수 이스케이프 시퀀스로 \x 다음은 16진수 수로 인식됨.
'\xA2';   
// 유니코드 이스케이프 시퀀스로 \u 다음은 유니코드로 인식됨.
'\u00A2';
// ECMAScript 6부터 새롭게 추가된 유니코드 코드 포인트 이스케이프 방식임.
String.fromCodePoint(0x00A2);

String.fromCodePoint() 메소드는 사파리, 익스플로러에서 지원하지 않는다.

긴 문자열 리터럴을 나누어 표현하기

자바스크립트에서는 길이가 긴 문자열 리터럴을 보기 좋게 표현하기 위해서 역 슬래시()나 결합(+) 연산자를 사용할 수 있다.

document.write("이 문자열은 아주 긴 문자열이다. \
따라서 몇 번에 걸친 줄 나누기가 필요한다. \
자바스크립트에서는 역슬래시와 문자 결합 연산자를 사용하여 줄을 나눌 수 있다.<br>");
document.write("이 문자열은 아주 긴 문자열이다." + 
" 따라서 몇 번에 걸친 줄 나누기가 필요한다." + 
" 자바스크립트에서는 역슬래시와 문자 결합 연산자를 사용하여 줄을 나눌 수 있다.");

역 슬래시()를 사용한 방식은 ECMAScript의 표준 방식이 아니다. 따라서 특정 웹 브라우저에서는 정상적으로 표현되지 않을 수도 있다.

String 객체

자바스크립트에서 문자열은 보통 문자열 리터럴을 사용하여 표현한다.

하지만 문자열을 나타낼 때 new 연산자를 사용하여 명시적으로 String 객체를 생성할 수도 있다.
이러한 String 객체는 문자열 값을 감싸고 있는 래퍼(wrapper) 객체이다.

var str = "JavaScript";
var strObj = new String("JavaScript");
str;              // "JavaScript"
strObj;           // "JavaScript"
typeof str;       // string
typeof strObj;    // object
(str == strObj);  // 문자열 값이 같으므로, true를 반환함.
(str === strObj); // 문자열 값은 같지만 타입이 다르므로, false를 반환함.



최종 수정 : 2021-08-27