특정 글자에 접근
String.prototype.at()
, String.prototype.charAt()
, 그리고 인덱스로 직접 접근
- 공통점
- 인수로 숫자를 받으면 특정 글자를 반환합니다.
- 차이점
at
메서드는 인수로 음수도 받을 수 있습니다.at
메서드와인덱스로 직접 접근
할 경우 인수가 범위를 초과하면undefined
를 반환하고charAt
메서드는 빈 문자열을 반환합니다.charAt
메서드는 인수를 생략하면0
으로 설정됩니다.
부분 문자열 찾기
String.prototype.search()
와 String.prototype.indexOf()
- 공통점
- 인수로 받은 값에 첫번째로 매칭된 부분 문자열의 인덱스를 반환합니다.
- 찾지 못하면
-1
을 반환합니다.
- 차이점
search
메서드는 인수로 정규식과 문자열을 받습니다.indexOf
메서드는 인수로 문자열을 받습니다.
비트 NOT 연산자를 이용해서 -1을 0으로 바꾸기
String.prototype.includes()
, String.prototype.startsWith()
, 그리고 String.prototype.endsWith()
- 공통점
- 인수로 문자열을 받아서 해당 문자열의 존재 유무에 따른 불리언 값을 반환합니다.
- 차이점
includes
메서드는 전체 문자열에 포함되어 있는지를 기준으로 합니다.startsWith
메서드는 시작부분과 일치 하는지를 기준으로 합니다.endsWith
메서드는 끝부분과 일치 하는지를 기준으로 합니다.
String.prototype.match()
인수로 받은 정규식 혹은 문자열에 부합하는 첫번째 문자열을 찾아서 배열로 반환합니다.
정규식에 g 플래그를 사용하면 부합하는 문자열을 전부 배열에 포함시켜서 반환합니다.
String.prototype.matchAll()
인수로 받은 정규식 혹은 문자열에 부합하는 문자열을 찾아서 이터레이터로 반환합니다.
정규식에 g 플래그를 사용하지 않으면 에러를 던집니다.
부분 문자열 교체
String.prototype.replace()
첫번째 인수로 받은 정규식 혹은 문자열에 부합하는 첫번째 문자열을 찾아서 두번째 인수에 해당하는 문자열로 교체합니다.
정규식에 g 플래그를 사용하면
replaceAll
메서드와 동일한 동작을 합니다.String.prototype.replaceAll()
첫번째 인수로 받은 정규식 혹은 문자열에 부합하는 문자열을 찾아서 두번째 인수에 해당하는 문자열로 전부 교체합니다.
정규식에 g 플래그를 사용하지 않으면 에러를 던집니다.
부분 문자열 추출하기
String.prototype.slice()
와 String.prototype.substring()
- 공통점
- 첫번째 인수부터 두번째 인수까지(미포함)에 해당하는 문자열을 반환합니다.
- 차이점
slice
메서드는 인수로 음수를 받을 수 있습니다.substring
메서드는 첫번째 인수가 두번째 인수보다 커도 됩니다.
구분자로 문자열 나누기
String.prototype.split
인수로 받은 문자열 혹은 정규식을 구분자로 하여 문자열을 나누고 배열로 반환합니다.
인수로 빈 문자열을 받아서 한 글자씩 나눈 결과를 배열로 반환할 수 있지만 이모티콘이나 특수문자가 포함된 경우를 조심해야 합니다.
이러한 이유로
Array.from
메서드나 스프레드 연산자
를 사용해야 합니다.문자열 채우기
String.prototype.padStart()
와 String.prototype.padEnd()
- 공통점
- 두번째 인수로 받은 문자열을 채워서 첫번째 인수로 받은 수만큼의 길이를 가진 문자열을 반환합니다.
- 차이점
padStart
메서드는 왼쪽부터 채워나간다.padEnd
메서드는 오른쪽부터 채워나간다.
서로게이트 쌍
자바스크립트에서 특정 글자에 접근하거나 부분 문자열을 추출할때 서로게이트 쌍을 신경써야 합니다.
서로게이트 쌍이란?유니코드 코드 포인트를 나타내기 위해 사용되는 특별한 두 개의 16비트 유니코드 단위입니다.이모티콘이나 특수문자를 표현할때 사용됩니다.High Surrogate(U+D800
~U+DBEF
)와 Low Surrogate(U+DC00
~U+DFFF
)가 결합하여 문자를 형성합니다.
서로게이트 쌍을 고려한
slice
메서드를 구현하면 아래와 같습니다.