ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Section 6. 자바스크립트 String 객체
    자바스크립트 2023. 3. 30. 19:37

    I. 생성자 함수

    const strObj1 = new String();
    const strObj2 = new String('Hello World!');
    
    console.log(strObj1);
    console.log(strObj2);

    strObj1과 strObj2의 출력을 비교하면 다음과 같다. 

    PrimitiveValue가 다른 것을 확인 할 수 있다. 또한 여기서 문자열도 유사배열 객체인 것을 확인 가능하다. 

    console.log(strObj1.valueOf(), strObj1.toString()); //  
    console.log(strObj2.valueOf(), strObj2.toString()); //Hello World! Hello World!

    valueOf 또는 toString 메서드는 해당 문자열의 원시값을 반환한다.

    const fromNum = new String(123);
    const fromBool = new String(true);
    const fromArr = new String([1, 'A', false]);
    const fromObj = new String({a: 1});
    
    console.log(typeof fromNum, fromNum); //object String {'123'}
    console.log(typeof fromBool, fromBool); //object String {'true'}
    console.log(typeof fromArr, fromArr); //object String {'1,A,false'}
    console.log(typeof fromObj, fromObj); //object String {'[object Object]'}

    다른 타입들도 감쌀 수 있는 것을 확인 할 수 있다. 문자열로 변호나한 값을 가진 String 객체를 반환한다.

     

    추가적으로 new 없이 사용하면?

    const str1 = String('Hello World!');
    const str2 = String(123);
    const str3 = String(true);
    const str4 = String({x: 1, y: 2}); // 💡 [object Object]
    const str5 = String([1, 2, 3]); // 💡 1,2,3
    
    console.log(typeof str1, str1); //string Hello World!
    console.log(typeof str2, str2); //string 123
    console.log(typeof str3, str3); //string true
    console.log(typeof str4, str4); //string [object Object]
    console.log(typeof str5, str5); //string 1,2,3

    생성자로서가 아닌 String 함수는 주어진 인자를 문자열로 변환하여 반환한다. 

     

    II. 유사 배열 객체

    let myStr = '안녕하세요!';
    
    console.log(
      myStr.length,
      myStr[0],
      myStr[myStr.length - 1]
    ); //6 '안' '!'
    
    myStr[myStr.length - 1] = '?';
    console.log(myStr); //안녕하세요!
    
    for (const letter of myStr) {
      console.log(letter);
    }
    //안
    //녕
    //하
    //세
    //요
    //!

    두번째 단락에 있는 코드를 보면 myStr의 마지막 요소를 ?로 바꿨는데 막상 출력을 해보면 바뀌지 않은 것을 볼 수 있다.

    이유는 String은 원시값이기 때문이다. 즉, 배열처럼 접근하는 방식으로는 수정이 불가능 하다는 뜻이다. 굳이 수정하려면 변수 값 자체를 다른 문자열로 대체해야 한다.

     

    정리하자면 다음과 같다.

    • length 프로퍼티 : 글자 수 반환한다
    • [ ] 안에 인덱스 숫자를 넣어 ~번째 글자 읽기(만) 가능하다
    • for ... of문 사용가능. 이터러블이기 때문이다

    III. 주요 인스턴스 메서드

    1. toUpperCase, toLowerCase

    라틴어 문자를 모두 대문자/소문자로 변경하여 반환하는 메서드이다.

    const word = 'Hello, World.';
    console.log(
      word.toUpperCase(),
      word.toLowerCase()
    ); //HELLO, WORLD. hello, world.
    
    console.log(word); //Hello, World.

    기존의 문자열은 바꾸지 않는다는 점이 포인트이다. 그리고 이 아래에 소개되는 메서드들도 마찬가지이다.

     

    2. charAt, at 

    인자로 주어진 인덱스의 문자를 반환하는 메서드이다.

     

    charAt 메서드 예시는 다음과 같다.

    console.log(
      'Hello World!'.charAt(0),
      '안녕하세요~'.charAt(2)
    ); //H 하

     

    at 메서드 예시는 다음과 같다.

    console.log(
      '안녕하세요~'.at(1),
      '안녕하세요~'.at(-1)
    ); //녕 ~

    신기능이고 배열에서도 사용가능하다.

    음수로 뒤에서부터 접근 가능한 것을 볼 수 있다(-1부터).

     

    3. indexOf, lastIndexOf

    indexOf는 인자로 주어진 문자열이 앞에서 처음 나타나는 인덱스를 반환한다.

    lastIndexOf는 인자로 주어진 문자열이 앞에서 부터 가장 마지막으로 나타나는 인덱스를 반환한다.

    포함되지 않을 시 -1을 반환한다.

    const word = '반갑습니다!';
    console.log (
      word.indexOf('습'),
      word.lastIndexOf('습')
    ); //2 2

     

    4. includes, startsWith, endsWith

    인자로 주어진 문자열을 포함 (아무곳에/ 맨 앞에/ 맨 끝에) 여부를 불리언으로 반환하는 메서드이다.

    const sentence = '옛날에 호랑이 한 마리가 살았어요.';
    
    for (const word of ['옛날에', '호랑이', '살았어요.', '나무꾼']) {
      console.log(
        'includes', word, sentence.includes(word)
      );
      console.log(
        'startsWith', word, sentence.startsWith(word)
      );
      console.log(
        'endsWith', word, sentence.endsWith(word)
      );
      console.log('- - - - -');
    }

    출력문은 다음과 같다.

     

    5. search

    인자로 받은 정규표현식과 일치하는 첫 부분의 인덱스를 반환하는 메서드이다.

    없을 시 -1을 반환한다.

    console.log(
      '하루가 7번 지나면 1주일이 되는 거야.'.search(/[0-9]/),
      '하루가 일곱 번 지나면 일주일이 되는 거야.'.search(/[0-9]/)
    ); //4 -1

     

    6. substring

    인자로 전달받은 인덱스(들)을 기준으로 자른 문자열을 반환하는 메서드이다.

    const word = 'ABCDEFGHIJKL';
    const part = word.substring(4, 8)
    
    console.log(word, part); //ABCDEFGHIJKL EFGH
    
    console.log(
      word.substring(-1),
      word.substring(4, 100),
      word.substring(100)
    ); //ABCDEFGHIJKL EFGHIJKL

    인자를 하나만 넣으면 해당 인덱스부터 끝까지 반환한다.

    음수나 범위 외 숫자는 범위 내 최소/최대 숫자로

     

    7. slice

    substring과 같으나 음수로 뒤에서부터 자를 수 있는 메서드이다. 

    const word = 'ABCDEFGHIJKL';
    console.log(
     word.substring(-4),
     word.slice(-4)
    ); //ABCDEFGHIJKL IJKL

     

    8. split

    인수로 주어진 문자열이나 정규표현식으로 분리하여 배열을 반환하는 메서드이다. 

    console.log(
      '010-1234-5678'.split('-'),
      'ABC1DEF2GHI3JKL'.split(/[0-9]/)
    ) 
    // ['010', '1234', '5678'] 
    // ['ABC', 'DEF', 'GHI', 'JKL']
    // 인자로 빈 문자열을 넣거나 인자 생략시
    const word = '안녕하세요';
    
    console.log(
      word.split(''),
      word.split()
    )
    // ['안', '녕', '하', '세', '요'] 
    // ['안녕하세요']
    const word = '하나 하면 할머니가 지팡이 짚고서 잘잘잘';
    
    console.log(
      word.split(' ', 2),
      word.split(' ', 4)
    )
    //['하나', '하면'] 
    //['하나', '하면', '할머니가', '지팡이']

    두 번째 인자로 배열의 최대 길이 지정이 가능하다.

     

    9. trim, trimStart, trimEnd

    앞뒤의 공백 제거하여 반환하는 메서드이다.

    const word = '  Hello World!  ';
    console.log(`--${word}--`); //--  Hello World!  --
    console.log(`--${word.trim()}--`); //--Hello World!--
    console.log(`--${word.trimStart()}--`); //--Hello World!  --
    console.log(`--${word.trimEnd()}--`); //--  Hello World!--

    중간의 공백은 제거하지 않는다.

     

    10. repeat

    인자로 주어진 정수만큼 문자열을 반복하여 반환하는 메서드이다. 

    const word = '호이';
    
    console.log(word.repeat(3)); //호이호이호이
    console.log(word.repeat(0)); // 
    console.log(word.repeat()); //
    console.log(word.repeat(-1)); //애러

    인수가 없거나 0이면 빈 문자열을 반환하고 음수면 오류를 발생시킨다.

     

    11. replace, replaceAll

    첫 번째 인자로 받은 문자열 또는 정규식을 두 번째 인자로 치환한 결과를 반환하는 메서드이다. 

    console.log(
      '이스탄불은 터키의 수도이다.'.replace('터키', '튀르키예')
    ); //이스탄불은 튀르키예의 수도이다.
    const word = '철권은 최고의 게임이다. 철권 대회 준비한다.';
    
    console.log(word.replace('철권', '와우')); //와우은 최고의 게임이다. 철권 대회 준비한다.

    replace 의 첫 인자가 문자열이면 일치하는 첫 부분만 치환한다.

    모두 치환하려면 정규식 /.../g 를 사용한다.

    console.log(word.replaceAll(/철권/g, '와우')); //와우은 최고의 게임이다. 와우 대회 준비한다.

    replaceAll 은 문자열도 자동으로 /.../g 처럼 인식한다.

     

    메서드 체이닝 method chaining

    값을 반환하는 인스턴스 메서드를 연속으로 사용하는 것을 말한다. 

    const word = ' 모두 HELLO! ';
    const rpFrom = 'hello';
    const rpTo = 'bye';
    
    console.log(
      word
      .trimStart()                // '모두 HELLO! '
      .toLowerCase()              // '모두 hello! '
      .replaceAll(rpFrom, rpTo)   // '모두 bye! '
      .toUpperCase()              // '모두 BYE! '
      .repeat(3)                  // '모두 BYE! 모두 BYE! 모두 BYE! '
      .trimEnd()                  // '모두 BYE! 모두 BYE! 모두 BYE!'
    ); //모두 BYE! 모두 BYE! 모두 BYE!
    
    console.log(word); //모두 HELLO!

    원본은 그대로인 것을 확인하고 넘어가자.

Designed by Tistory.