01. at( )

"문자열".at(위치값)
  • 지정한 숫자(index)를 받아, 문자열에서 해당 되는 인덱스의 요소를 반환합니다.
  • 문자열에서 위치값에 따라 특정 위치의 문자를 가져올 수 있습니다.
  • 위치값이 음수일 경우 뒤에서부터 시작합니다.
  • 위치값에 위치 해있는 문자열이 없으면 'undefined'가 출력됩니다.
{
    "javascript reference".at(0)    // j
    "javascript reference".at(3)    // a
    "javascript reference".at(5)    // c
    "javascript reference".at(10)    // 빈문자열
    "javascript reference".at(11)    // r
    "javascript reference".at(12)    // e
    "javascript reference".at(-1)    // e
    "javascript reference".at(-2)    // c
    "javascript reference".at(-5)    // r
    "javascript reference".at(22)    // undefined

    console.log("문자열".at(위치값));
}

02. charAt( )

"문자열".charAt(위치값)
  • 지정한 숫자(index)를 받아, 문자열에서 해당 되는 인덱스의 단일문자를 반환합니다.
  • 문자열에서 위치값에 따라 특정 위치의 문자를 가져올 수 있습니다.
{
    "javascript reference".charAt(0)    // j
    "javascript reference".charAt(3)    // a
    "javascript reference".charAt(5)    // c
    "javascript reference".charAt(10)    // 빈문자열
    "javascript reference".charAt(11)    // r
    "javascript reference".charAt(12)    // e

    console.log("문자열".charAt(위치값));
}

03. charCodeAt( )

"문자열".charCodeAt(위치값)
  • 지정한 숫자(index)를 받아, 문자열에서 해당 되는 인덱스의 유니코드 정수 값을 반환합니다.
  • 문자열에서 지정된 위치에 있는 UTF-16 코드 유닛의 값을 반환합니다.
  • 위치값에 위치 해있는 문자열이 없거나 위치값의 값이 음수이면 'NaN'이 출력됩니다.
{
    "javascript reference".charCodeAt(0)    // j의 UTF-16 코드 유닛 값 : 106
    "javascript reference".charCodeAt(3)    // a의 UTF-16 코드 유닛 값 : 97
    "javascript reference".charCodeAt(5)    // c의 UTF-16 코드 유닛 값 : 99
    "javascript reference".charCodeAt(10)    // 빈문자열의 UTF-16 코드 유닛 값 : 32
    "javascript reference".charCodeAt(11)    // r의 UTF-16 코드 유닛 값 : 114
    "javascript reference".charCodeAt(12)    // e의 UTF-16 코드 유닛 값 : 101
    "javascript reference".charCodeAt(-1)    // NaN
    "javascript reference".charCodeAt(22)    // NaN

    console.log("문자열".charCodeAt(위치값));
}

✍️ UTF-16 코드 유닛

UTF-16 코드 유닛은 문자열 내의 각 문자를 표현하는 데 사용되는 16비트(2바이트)의 코드 값입니다.
UTF-16은 유니코드 문자를 표현하는 방법 중 하나로, 유니코드 문자를 2바이트 코드 유닛으로 표현합니다.
UTF-16은 기본적으로 빅 엔디안(Big-Endian) 방식으로 코드 유닛을 저장합니다.
빅 엔디안은 상위 바이트(높은 자리수)부터 메모리에 저장하는 방식으로, 상위 바이트를 먼저 읽어들이게 됩니다.
반대로 리틀 엔디안(Little-Endian)은 하위 바이트(낮은 자리수)부터 메모리에 저장하는 방식으로, 하위 바이트를 먼저 읽어들입니다.

04. codePointAt( )

"문자열".codePointAt(위치값)
  • 지정한 숫자(index)를 받아, 문자열에서 해당 되는 인덱스의 유니코드 포인트 정수 값을 반환합니다.
  • 문자열에서 지정된 위치에 있는 UTF-16 코드 유닛의 값을 반환합니다.
  • 위치값에 위치 해있는 문자열이 없거나 위치값의 값이 음수이면 'undefined'이 출력됩니다.
{
    "javascript reference".codePointAt(0)    // j의 UTF-16 유니코드 포인트 정수 값 : 106
    "javascript reference".codePointAt(3)    // a의 UTF-16 유니코드 포인트 정수 값 : 97
    "javascript reference".codePointAt(5)    // c의 UTF-16 유니코드 포인트 정수 값 : 99
    "javascript reference".codePointAt(10)    // 빈문자열의 UTF-16 유니코드 포인트 정수 값 : 32
    "javascript reference".codePointAt(11)    // r의 UTF-16 유니코드 포인트 정수 값 : 114
    "javascript reference".codePointAt(12)    // e의 UTF-16 유니코드 포인트 정수 값 : 101
    "javascript reference".codePointAt(-1)    // undefined
    "javascript reference".codePointAt(22)    // undefined

    console.log("문자열".codePointAt(위치값));
}

✍️ charCodeAt( )와 codePointAt( ) 다른 점

둘 다 문자열에서 지정된 위치에 있는 문자의 유니코드 값을 반환하지만, 처리하는 방식이 다릅니다.
charCodeAt( ) 메소드는 문자열에서 지정된 위치에 있는 문자의 UTF-16 코드 유닛 값을 반환합니다. 이 메소드는 문자열의 길이가 2바이트를 초과하는 경우 첫 번째 코드 유닛을 반환합니다. 이 방식으로는 대리 코드 포인트(서로 다른 두 개의 16비트 코드 유닛으로 이루어진 하나의 문자)를 처리할 수 없습니다.
반면에 codePointAt( ) 메소드는 문자열에서 지정된 위치에 있는 문자의 유니코드 코드 포인트 값을 반환합니다. 이 메소드는 대리 코드 포인트를 처리할 수 있으며, 문자열의 길이가 2바이트를 초과하는 문자를 올바르게 처리할 수 있습니다.

05. concat( )

"문자열".concat("문자열")
  • 매개변수로 전달된 문자열을 받어, 결합된 새로운 문자열을 반환합니다.
{
    const str1 = "java";
    const str2 = "script";
    const result1 = str1.concat(str2);

    console.log(result1);    // javascript

    const str3 = "javascript";
    const str4 = "reference";
    const result2 = str1.concat(' ', str4);

    console.log(result2);   // javascript reference
}

06. includes( )

"문자열".includes(검색값, [위치값])
  • 문자열 포함 여부를 검색하여, 불린(true, false)을 반환합니다.
  • 대소문자를 구별합니다.
{
    "javascript reference".includes("javascript");      // true
    "javascript reference".includes("j");               // true
    "javascript reference".includes("J");               // false
    "javascript reference".includes("a");               // true
    "javascript reference".includes("reference");       // true
    "javascript reference".includes("reference", 11);   // true
    "javascript reference".includes("reference", 12);   // false

    console.log("javascript reference".includes(검색값, 위치값));
}

07. indexOf( )

"문자열".indexOf(검색값, [위치값])
  • 문자열을 검색하여, 주어진 값과 일치하는 첫 번째 위치값(index)을 반환합니다.
  • 문자열을 검색하여, 주어진 값과 일치하는 것이 없으면 -1을 반환합니다.
  • 대소문자를 구별합니다.
{
    "javascript refercence".indexOf("javascript");      // 0
    "javascript refercence".indexOf("javascripts");     // -1
    "javascript refercence".indexOf("j");               // 0
    "javascript refercence".indexOf("J");               // -1
    "javascript refercence".indexOf("a");               // 1
    "javascript refercence".indexOf("jv");              // -1
    "javascript refercence".indexOf("refercence");      // 11
    "javascript refercence".indexOf("r");               // 6
    "javascript refercence".indexOf("re");              // 11
    "javascript refercence".indexOf("javascript", 0);   // 0
    "javascript refercence".indexOf("javascript", 1);   // -1
    "javascript refercence".indexOf("refercence", 1);   // 11
    "javascript refercence".indexOf("refercence", 11);  // 11
    "javascript refercence".indexOf("refercence", 12);  // -1
    "javascript refercence".indexOf("r", 7);            // 11
    "javascript refercence".indexOf("r", 12);           // 15 
    
    console.log("javascript refercence".indexOf(검색값, 위치값));       
}

08. lastIndexOf( )

"문자열".indexOf(검색값)
  • 문자열을 역순으로 검색하여, 주어진 값과 일치하는 첫 번째 위치값(index)을 반환합니다.
  • 문자열을 역순으로 검색하여, 주어진 값과 일치하는 것이 없으면 -1을 반환합니다.
  • 대소문자를 구별합니다.
{
    "javascript reference".lastIndexOf("javascript");       // 0
    "javascript reference".lastIndexOf("javascripts");      // -1
    "javascript reference".lastIndexOf("j");                // 0
    "javascript reference".lastIndexOf("a");                // 3
    "javascript reference".lastIndexOf("jv");               // -1
    "javascript reference".lastIndexOf("reference");        // 11
    "javascript reference".lastIndexOf("r");                // 15

    console.log("javascript reference".lastIndexOf(검색값));
}

09. localeCompare( )

"문자열".localeCompare("문자열")
  • 문자열과 문자열을 비교하여, 수치(음수, 양수, 0)을 반환합니다.
  • 호출한 문자열과 매개변수로 전달된 문자열을 사전순으로 비교합니다.
  • 호출한 문자열이 매개변수로 전달된 문자열보다 앞에 오는 경우, -1을 반환합니다.
  • 호출한 문자열이 매개변수로 전달된 문자열과 같은 경우, 0을 반환합니다.
  • 호출한 문자열이 매개변수로 전달된 문자열보다 뒤에 오는 경우, 1을 반환합니다.
{
    const str1 = "java";
    const str2 = "script";
    const str3 = "Java";
    const str4 = "reference";
    const str5 = "Reference";

    console.log(str1.localeCompare(str2));  // -1
    console.log(str2.localeCompare(str1));  // 1
    console.log(str1.localeCompare(str3));  // -1
    console.log(str3.localeCompare(str1));  // 1
    console.log(str4.localeCompare(str5));  // -1
    console.log(str5.localeCompare(str4));  // 1
    console.log(str1.localeCompare(str1));  // 0
}

10. match( )

"문자열".match(검색값)
"문자열".match(정규식표현)
  • 문자열(정규식)을 검색하고, 문자열(배열)을 반환합니다.
  • 문자열을 검색하여, 주어진 값과 일치하는 것이 없으면 null을 반환합니다.
  • 대소문자를 구별합니다.
  • match( ) 메서드는 문자값(배열)을 반환하고, search( ) 메서드는 위치값(숫자)를 반환하는 것이 다릅니다.
{
    "javascript reference".match("javascript");    // "javascript"
    "javascript reference".match("reference");     // "reference"
    "javascript reference".match("r");             // "r"
    "javascript reference".match("R");             // null
    "javascript reference".match(/reference/);     // "reference"
    "javascript reference".match(/Reference/);     // null
    "javascript reference".match(/Reference/i);    // "reference"
    "javascript reference".match(/Reference/g);    // "reference"
    "javascript reference".match(/r/);             // "r"
    "javascript reference".match(/r/g);            // "r", "r", "r"
    "javascript reference".match(/w/g);            // null
    "javascript reference".match(/R/ig)            // "r", "r", "r"

    console.log("javascript reference".match(검색값));     
}

12. normalize( )

"문자열(유니코드 문자열)".normalize("정규화")
  • 주어진 문자열을 정규화된 형태로 반환합니다.
  • 유니코드 문자열을 정규화(normalization)합니다.
  • 정규화 방식은 'NFC', 'NFD', 'NFKC', 'NFKD' 입니다.
  • 만약 생략되거나 undefined일 경우 'NFC'를 사용합니다.
{
    // 문자열
    "javascript".normalize("NFC");  // javascript
    "javascript".normalize("NFD");  // javascript
    "javascript".normalize("NFKC");  // javascript
    "javascript".normalize("NFKD");  // javascript

    // 유니코드 문자열
    "\u0041\u0308".normalize("NFC");  // 'Ä'
    "\u0041\u0308".normalize("NFD");  // 'Ä'
    "\u0041\u0308".normalize("NFKC");  // 'Ä'
    "\u0041\u0308".normalize("NFKD");  // 'Ä'

    console.log("문자열(유니코드 문자열)".normalize("정규화"));
}

✍️ 정규화 방식

"NFC" : Canonical Composition (NFC)를 수행합니다.
"NFD" : Canonical Decomposition (NFD)를 수행합니다.
"NFKC" : Compatibility Composition (NFKC)를 수행합니다.
"NFKD" : Compatibility Decomposition (NFKD)를 수행합니다.
이 중에서 대부분의 경우 "NFC" 또는 "NFKC" 옵션을 사용합니다.

✍️ 유니코드 문자열

유니코드 문자열(Unicode string)은 유니코드(Unicode) 문자 집합을 사용하여 인코딩된 문자열을 의미합니다.
유니코드는 전 세계의 모든 문자와 기호를 포함하는 문자 집합입니다.
이는 다양한 언어, 기호, 이모티콘 등을 포함하고 있으며, 각각의 문자는 고유한 코드 포인트(숫자 값)를 가지고 있습니다.

13. padEnd( )

"문자열".padEnd(문자열의 길이, [선택적 매개변수])
  • 주어진 길이에 맞게 뒤 문자열을 채우고, 새로운 문자열을 반환합니다.
  • 매개변수를 지정하지 않으면 기본값인 공백이 사용됩니다.
{
    "javascript".padEnd(5);     // javascript
    "javascript".padEnd(15);     // javascript
    "javascript".padEnd(15, '-');     // javascript-----
    "javascript".padEnd(15, '^');     // javascript^^^^^
    "javascript".padEnd(12, '!');     // javascript!!
    "javascript".padEnd(12, 'ref');     // javascriptre 생성될 문자열 길이의 값까지만 변수 생성

    console.log("문자열".padEnd(문자열의 길이, [선택적 매개변수]));
}

14. padStart( )

"문자열".padStart(문자열이의 길이, [선택적 매개변수])
  • 주어진 길이에 맞게 앞 문자열을 채우고, 새로운 문자열을 반환합니다.
  • 매개변수를 지정하지 않으면 기본값인 공백이 사용됩니다.
{
    "javascript".padStart(5);     // javascript
    "javascript".padStart(15);     //      javascript
    "javascript".padStart(15, '-');     // -----javascript
    "javascript".padStart(15, '^');     // ^^^^^javascript
    "javascript".padStart(12, '!');     // !!javascript
    "javascript".padStart(12, 'ref');     // rejavascript 생성될 문자열 길이의 값까지만 변수 생성(선택적 매개변수 입력 후 입력되지 않은 문자는 삭제)

    console.log("문자열".padStart(문자열의 길이, [선택적 매개변수]));
}

15. repeat( )

"문자열".repeat(반복할 횟수)
  • 주어진 횟수만큼 반복 복사하여, 새로운 문자열을 반환합니다.
  • 반복할 횟수의 값은 0 이상의 정수이어야 합니다.
{
    "java".repeat(3);   // javajavajava
    "java".repeat(5);   // javajavajavajavajava
    "script".repeat(3);   // scriptscriptscript
    "jQuery".repeat(3);   // jQueryjQueryjQuery

    console.log("문자열".repeat(반복할 횟수));
}

18. search( )

"문자열".search(검색값)
"문자열".search(정규식표현)
  • 문자열(정규식)을 검색하고, 위치값(숫자)을 반환합니다.
  • 문자열을 검색하여, 주어진 값과 일치하는 것이 없으면 -1을 반환합니다.
  • 대소문자를 구별합니다.
{
    "javascript reference".search("javascript");    // 0   
    "javascript reference".search("reference");     // 11   
    "javascript reference".search("r");             // 6   
    "javascript reference".search("a");             // 1   
    "javascript reference".search("jv");            // -1   
    "javascript reference".search("J");             // -1   
    "javascript reference".search(/reference/);     // 11   정규식 표현 
    "javascript reference".search(/Reference/);     // -1   
    "javascript reference".search(/Reference/i);    // 11   i는 대소문자를 상관없게 해줍니다.
    "javascript reference".search(/[a-z]/g);        // 0    g는 글로벌 문자

    console.log("javascript reference".search(검색값));
}

19. slice( )

"문자열".slice(시작 위치, [끝나는 위치])
  • 문자열 시작 위치에서 종료 위치 값을 추출하여, 새로운 문자열을 반환합니다.
  • 끝나는 위치의 요소는 추출하지 않습니다.
  • 시작 위치, 끝나는 위치에 음수가 들어가게 되면 배열의 맨 뒤에서부터 위치 값을 추출합니다.
{
    "javascript".slice(0);          // javscript
    "javascript".slice(1);          // avscript
    "javascript".slice(2);          // vascript
    "javascript".slice(0, 1);       // j
    "javascript".slice(1, 2);       // a
    "javascript".slice(0, 2);       // ja
    "javascript".slice(0, 3);       // jav
    "javascript".slice(5, 10);      // cript
    "javascript".slice(5, -1);      // crip
    "javascript".slice(5, -2);      // cri
    "javascript".slice(-1);         // t
    "javascript".slice(-2);         // pt
    "javascript".slice(-3);         // ipt
    "javascript".slice(-3, -1);     // ip

    console.log("javascript".slice(시작위치, 끝나는위치));
}

22. split( )

"문자열".split(구분자, [제한])
  • 구분자를 이용하여, 여러개의 문자열(배열)을 반환합니다.
{
    "javascript".split("");                        // ['j', 'a', 'v', 'a', 's', 'c', 'r', 'i', 'p', 't']
    "java script".split(" ");                      // ['java', 'script']
    "java scr ipt".split(" ");                     // ['java', 'scr', 'ipt']

    "javascript".split("", 1);                     // ['j']
    "javascript".split("", 2);                     // ['j', 'a']
    "javascript".split("", 3);                     // ['j', 'a', 'v']

    "java script".split(" ", 1);                   // ['java']
    "java script".split(" ", 2);                   // ['java', 'script']

    "javascript".split("j");                       // ['', 'avascript'] 구분자가 맨 앞과 맨 뒤에 위치하면 빈 문자열('')이 나옵니다.
    "javascript".split("a");                       // ['j', 'v', 'script'] 구분자를 제외한 문자열이 나옵니다.
    "javascript".split("e");                       // ['javascript']

    "java/scr/ipt".split("/");                     // ['java', 'scr', 'ipt']
    "java&scr!ipt".split("&");                     // ['java', 'scr!ipt']
    "java&scr!ipt".split("!");                     // ['java&scr', 'ipt']
    "java&scr!ipt".split(/&|\!/);                  // ['java', 'scr', 'ipt'] 정규식 표현

    "javascript".split("").join();                 // j,a,v,a,s,c,r,i,p,t
    "javascript".split("").join("*");              // j*a*v*a*s*c*r*i*p*t
    "javascript".split("").reverse().join();       // t,p,i,r,c,s,a,v,a,j
    "javascript".split("").reverse().join("/");    // t/p/i/r/c/s/a/v/a/j

    console.log("javascript".split(구분자));
}

30. trim( )

"문자열".trim( )
  • 문자열의 앞/뒤 공백을 제거하고, 새로운 문자열을 반환합니다.
{
    "javascript".trim("");      // javascript
    "javascript ".trim("");     // javascript
    " javascript ".trim("");    // javascript
    " java script ".trim("");    // java script
    
    console.log("javascript".trim(""));
}

31. trimEnd( )

"문자열".trimEnd( )
  • 문자열의 뒤 공백을 제거하고, 새로운 문자열을 반환합니다.
{
    " javascript ".trimEnd("");  // javascript
    
    console.log("javascript".trimEnd(""));
}

32. trimStart( )

"문자열".trimStart( )
  • 문자열의 앞 공백을 제거하고, 새로운 문자열을 반환합니다.
{
    " javascript ".trimStart("");  // javascript
    
    console.log("javascript".trimStart(""));
}