32.1. String 생성자 함수
- 표준 빌트인 생성자 함수 객체
- new 연산자와 함께 호출하여 String 인스턴스 생성
- 인수를 전달하지 않으면 [[StringData]] 내부 슬롯을 가진 래퍼 객체 생성
- 문자열이 아닌 값을 전달하면 강제 변환하여 생성
- 유사 배열 객체이면서 이터러블
- 인덱스로 접근 가능하지만 값은 변경할 수 없음
- new 연산자 없이 String 생성자 함수 호출 시 인스턴스가 아닌 문자열 반환
32.2. length 프로퍼티
- 문자열의 문자 개수 반환
- 유사 배열 객체
- 프로퍼티 키 = 인덱스
- 프로퍼티 값 = 각 문자
32.3. String 메서드
- 원본 배열을 직접 변경하는 메서드(mutator method)
- 원본 String 래퍼 객체는 읽기 전용이므로 사실상 새로운 문자열 반환임
- 원본 배열을 직접 변경하지 않고 새로운 배열을 반환하는 메서드(accessor method)
32.3.1. String.prototype.indexOf
- 대상 문자열에서 인수로 전달받은 문자열의 첫 번째 인덱스 반환
- 실패하면 -1 반환
- 두 번째 인수로 검색 시작할 인덱스 전달 가능
- ex. 'Hello World'.indexOf('l', 3); -> 3
- ES6 도입된 includes 권장
32.3.2. String.prototype.search
- 대상 문자열에서 인수로 전달받은 정규 표현식과 매치하는 문자열의 인덱스 반환
- 실패하면 -1 반환
- ex. 'Hello World'.search(/o/); -> 4
32.3.3. String.prototype.includes
- ES6 도입: 대상 문자열에 인수로 전달받은 문자열 포함 여부 boolean 반환
- 두 번째 인수로 검색 시작할 인덱스 전달 가능
- ex. 'Hello World'.includes('H', 3); -> false
32.3.4. String.prototype.startsWit
- ES6 도입: 대상 문자열이 인수로 전달받은 문자열 시작 여부 boolean 반환
- 두 번째 인수로 검색 시작할 인덱스 전달 가능
- ex. 'Hello World'.startsWith(' ', 5); -> true
32.3.5. String.prototype.endsWith
- ES6 도입: 대상 문자열이 인수로 전달받은 문자열 종료 여부 boolean 반환
- 두 번째 인수로 검색할 문자열의 길이 전달 가능
- ex. 'Hello World'.startsWith('lo', 5); -> true
32.3.6. String.prototype.charAt
- 대상 문자열에서 인수로 전달받은 인덱스에 위치한 문자를 검색하여 반환
- 인덱스는 문자열의 범위(0 ~ length-1) 사이의 정수여야 함, 벗어난 경우 빈 문자열 반환
- ex. 'Hello'.charAt(5); -> ''
32.3.7. String.prototype.substring
- 대상 문자열에서 첫 번째 인수 인덱스에서부터 두 번째 인수의 바로 이전까지의 부분 문자열 반환
- 두 번째 인수 생략 시 마지막 문자열까지 반환
- 첫 번째 인수 > 두 번째 인수인 경우 맞교환하여 동작
- 인수 < 0 또는 NaN인 경우 0으로 취급
- 인수 > 문자열 길이(str.length)인 경우 문자열 길이로 취급됨
- ex. 'Hello World'.substring(1, 4); -> 'ell'
- indexOf와 함께 사용하면 특정 문자열 기준으로 앞뒤 부분 문자열 취득 가능
32.3.8. String.prototype.slice
- substring 메서드와 동일하게 동작
- 음수인 인수 전달 가능 -> 뒤에서부터 시작
- substring은 인수 < 0 인 경우 0으로 취급하여 전체 문자열 반환
- ex. 'Hello World'.slice(-5); -> 'world'
32.3.9. String.prototype.toUpperCase
32.3.10. String.prototype.toLowerCase
32.3.11. String.prototype.trim
- 대상 문자열 앞뒤 공백 제거
- replace 메서드에 정규 표현식을 전달하여 제거도 가능
32.3.12. String.prototype.repeat
- ES6 도입: 대상 문자열을 인수로 전달받은 정수만큼 반복하여 연결한 새로운 문자열 반환
- 인수가 0 또는 생략한 경우 빈 문자열 반환
- 음수인 경우 RangeError 반환
32.3.13. String.prototype.replace
- 대상 문자열에서 첫 번째 인수로 전달받은 문자열 또는 정규 표현식을 검색 후, 두 번째 인수로 전달한 문자열로 치환하여 반환
- 검색된 문자열이 여러 개인 경우, 첫 번째 문자열만 치환
- 특수한 교체 패턴 사용 가능 ($& : 검색된 문자열)
- 두 번째 인수로 치환 함수 전달 가능
- ex. 'Hello Hello'.replace(/hello/gi, 'Lee') -> 'Lee Lee'
32.3.14. String.prototype.split
- 대상 문자열에서 첫 번째 인수로 전달한 문자열 또는 정규 표현식을 검색하고 분리한 문자열을 배열로 반환
- 빈 문자열을 인수로 전달하면 각 문자를 모두 분리
- 생략하면 대상 문자열 전체를 하나의 요소로 배열 반환
- 두 번째 인수로 배열의 길이 지정 가능
- ex. 'How are you doing?'.split(' ', 3); -> ['How', 'are', 'you'];
- Array.prototype.reverse, Array.prototype.join과 함께 문자열 역순으로 변경 가능
[출처] 모던 자바스크립트, Deep Dive