2 minute read

문자열

텍스트 형식의 데이터는 길이에 상관없이 문자열 형태로 저장

페이지 인코딩 방식과 상관없이 항상 UTF-16 형식 따름
  • 따옴표

    작은 따옴표, 큰 따옴표, 백틱 으로 감쌀 수 있음

    작은 따옴표와 큰 따옴표 차이 기능상 차이 없음

    백틱에는 템플릿 리터럴 로 표현식을 문자열 중간에 삽입 가능

  • 백틱

    표현식을 문자열 중간에 삽입 가능

    문자열 여러줄에 걸쳐 작성 가능

    ‘템플릿 함수’ 기능 제공

  • 역슬레시

    이스케이프 문자로 불림

    특수문자 표시할 때 사용

    \로 시작

    따옴표도 표시 가능

    문자열 정확하게 읽기 위 한 용도로 사용

    제 약할 끝나면 사라짐

    메모리에 저장되지 않음

    \ 보여줄 시 \

  • 문자열 길이

    length 프로퍼티에서 제공

    \n 은 ‘특수문자’ 하나로 취급됨

  • length 는 프로퍼티

    숫자가 저장되는 프로퍼티

  • 특정 글자 접근

    1. 대괄호

      근래의 사용 방식

      접근하려는 위치에 글자 없을 시 undefined

    2. str.charAt(pos)

      하위 호환성을 위해 남음

      접근하려는 위치에 글자 없을 시 빈 문자열

    3. for..of

      문자열을 구성하는 글자 대상으로 반복 작업 가능ㅇ

  • 문자열의 불변성

    문자열 중간 글자 하나 바꾸려고 할 시 에러 발생

    새로운 문자열 만든 후 이 문자열 str 에 할당

  • 대/소문자 변경

    toLowerCase(), toUpperCase() 로 대/소 문자 변경 (케이스 변경)

    글자 하나의 케이스만 변경 가능

  • 부분 문자열 찾기

    1. str.indexOf(substr, [pos])

      문자열 str의 pos 에서 시작해, 부분 문자열 substr 의 위치 반환, 그렇지 못 하면 -1 반환

    • str.lastIndexOf(substr,position)

      indexOf 와 유사한 기능

      문자열 끝에서부터 부분문자 찾음

      반환되는 부분 문자열 위치는 문자열 끝이 기준

    if 문에서 비교시 -1 과 비교

  • 비트 NOT 연산자 사용한 기법

    피연산자를 32비트로 바꾼 후(소수부는 모두 버려짐) 모든 비트 반전

    ~ 로 사용

    if…indexOf 에서 사용시 -1과 쉽게 비교 가능 (지양)

  • include,startsWith,endsWith

    1. str.include(substr,[pos])

      str 에 부분 문자열 substr 이 있는지에 따라 true/false 사용

      포함 여부만 알고 싶을 시 적절

    2. str.startsWith,/endsWith

      특정 문자열로 시작되는지/끝나는지 알 수 있음

  • 부분 문자열 추출하기

    1. str.slice(start,[,end])

    start부터 end 까지(end 미포함) 반환

    두번째 인수 생략시 문자열 끝까지 반환

    인수에 음수 넘길 시 문자열 끝에서부터 카운팅

    1. str.substring(start,[,end])

    start 와 end 사이 문자열 반환

    start가 end보다 커도 괜찮음

    음수 인수 허용 안 함

    1. str.substr(start,[length])

    start 부터 length 개의 글자 반환

    첫번째 인수 음수면 뒤에서부터 개수 셈

    • 어떤 메서드?

      substr 은 구식. 지원 안 하는 호스트 환경 있을 수 있음

      slice 가 음수 인수 허용하고 유연함

  • 문자열 비교

    알파벳 순서 기준으로 글자끼기 비교

    모든 문자열 UTF-16 사용해 인코딩됨

    • 예외

      1. 소문자는 대문자보다 항상 큼

      2. 발음 구별 기호 붙는 글자는 알파벳 순서 기준 따르지 않음

      • 코드관련 메소드

        1. str.codePointAt(pos)

          pos에 위치한 글자 코드 반환

        2. String.fromCodePoint(code)

          숫자 형식의 code 에 대응하는 글자 만들어줌

  • 문자열 제대로 비교

    모던 브라우저 대부분이 ECMA-402 지원

    • str.localeCompare(str2)

      ECMA-402 규칙에 따라 str,str2 비교 해줌

      인수에 하나 더 넣어서 여러 설정에 대응 가능

  • 문자열 심화

    • 서로 게이트 쌍

      2바이트 표현 체계로 충분하지 않음

      사용 빈도 낮은 기호는 ‘서로게이트 쌍’ 이라 불리는 2바이트 글자 쌍을 사용해 인코딩

      인코딩한 기호는 2바이트

      String.fromCodePoint와 str.codePointAt 로 제대로 처리 가능

    • 발음 구별 기호와 유니코드 정규화

      임의 조합 지원하기 위해 몇개의 유니코드 문자 남겨놓음

      이를 이용하여 베이스 글자 꾸미기 가능

      단점으로 눈으로 봤을 때 같은 글자이지만 유니코드 조합 다른 경우 생김

      • 유니코드 정규화

        str.normalize 에 구현

        UTF-16 테이블에 포함하는 코드만 부여.

요약

  • JS는 문자열 UTF-16 형식 따름

  • 따옴표는 작은,따옴표, 큰 따옴표, 백틱으로 나뉨

  • 작은 따옴표, 큰 따옴표는 차이 없음

  • 백틱으로 표현식, 여러줄, ‘템플릿 함수’ 제공

  • 역슬레시로 특수문자 표시 가능

  • 문자열 길이는 length 프로퍼티

  • 특정 글자 접근시 대괄호, str.charAt, for…of (이터러블)

  • 문자열은 불변성 가지고 있어서 중간 하나 바꾸기 불가능

  • toLowerCase(), toUpperCase()로 대/소문자 변경

  • str.indexOf, str.lastIndexOf 로 부분 문자열 비교 가능

  • include,startsWith,endsWith 로 여러 방식으로 문자열 찾기 가능

  • slice,substring,substr로 부분 문자열 추출

  • 모던 JS 에선 slice 추천

  • 문자열 비교는 UTF-16 기준

  • 제대로 비교시 str.localeCompare(str2)

  • 서로 게이트 쌍으로 사용 빈도 낮은 기호 표현

  • 발음 구별 기호는 유니코드 조합으로 가능

  • str.normalize 로 유니코드 정규화 가능

Categories: ,

Updated: