모던 자바스크립트 Deep Dive - 32. String

둡둡·2024년 2월 21일

Modern Javascript Deep Dive

목록 보기
33/49

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

profile
괴발개발라이프

0개의 댓글