Daehyunii 2022. 7. 27. 19:41

ν‘œμ€€ 빌트인 객체인 String은 μ›μ‹œ νƒ€μž…μΈ λ¬Έμžμ—΄μ„ λ‹€λ£° λ•Œ μœ μš©ν•œ ν”„λ‘œνΌν‹°μ™€ λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.

 

32.1 String μƒμ„±μž ν•¨μˆ˜

  ν‘œμ€€ 빌트인 객체인 String κ°μ²΄λŠ” μƒμ„±μž ν•¨μˆ˜ 객체닀. λ”°λΌμ„œ new μ—°μ‚°μžμ™€ ν•¨κ»˜ ν˜ΈμΆœν•˜μ—¬ String μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μžˆλ‹€. String μƒμ„±μž ν•¨μˆ˜μ— 인수λ₯Ό μ „λ‹¬ν•˜μ§€ μ•Šκ³  new μ—°μ‚°μžμ™€ ν•¨κ»˜ ν˜ΈμΆœν•˜λ©΄ [[StringData]] λ‚΄λΆ€ μŠ¬λ‘―μ— 빈 λ¬Έμžμ—΄μ„ ν• λ‹Ήν•œ String 객체λ₯Ό μƒμ„±ν•œλ‹€.

const strObj = new String();
console.log(strObj); // String length: 0

  String μƒμ„±μž ν•¨μˆ˜μ˜ 인수둜 λ¬Έμžμ—΄μ„ μ „λ‹¬ν•˜λ©΄μ„œ new μ—°μ‚°μžμ™€ ν•¨κ»˜ ν˜ΈμΆœν•˜λ©΄ [[StringData]] λ‚΄λΆ€ μŠ¬λ‘―μ— 인수둜 전달받은 λ¬Έμžμ—΄μ„ ν• λ‹Ήν•œ String 래퍼 객체λ₯Ό μƒμ„±ν•œλ‹€

const strObj = new String('lee');
console.log(strObj); // String {'lee'}

  String 래퍼 κ°μ²΄λŠ” λ°°μ—΄κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ length ν”„λ‘œνΌν‹°μ™€ 인덱슀λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 숫자 ν˜•μ‹μ˜ λ¬Έμžμ—΄μ„ ν”„λ‘œνΌν‹° ν‚€λ‘œ, 각 문자λ₯Ό ν”„λ‘œνΌν‹° κ°’μœΌλ‘œ κ°–λŠ” μœ μ‚¬ λ°°μ—΄ κ°μ²΄μ΄λ©΄μ„œ μ΄ν„°λŸ¬λΈ”μ΄λ‹€. λ”°λΌμ„œ λ°°μ—΄κ³Ό μœ μ‚¬ν•˜κ²Œ 인덱슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 각 λ¬Έμžμ— μ ‘κ·Όν•  수 μžˆλ‹€. 단, λ¬Έμžμ—΄μ€ μ›μ‹œ κ°’μ΄λ―€λ‘œ λ³€κ²½ν•  수 μ—†λ‹€. μ΄λ•Œ μ—λŸ¬λŠ” λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.

const strObj = new String('lee');
console.log(strObj); // String {'lee'}

console.log(strObj[0]); // l
console.log(strObj[1]); // e
console.log(strObj[2]); // e

strObj[0] = 'w';
console.log(strObj); // String {'lee'}

  String μƒμ„±μž ν•¨μˆ˜μ˜ 인수둜 λ¬Έμžμ—΄μ΄ μ•„λ‹Œ 값을 μ „λ‹¬ν•˜λ©΄ 인수λ₯Ό λ¬Έμžμ—΄λ‘œ κ°•μ œ λ³€ν™˜ν•œ ν›„, [[StringData]] λ‚΄λΆ€ μŠ¬λ‘―μ— λ³€ν™˜λœ λ¬Έμžμ—΄μ„ ν• λ‹Ήν•œ String 래퍼 객체λ₯Ό μƒμ„±ν•œλ‹€.

const strObj = new String(123);
console.log(strObj); // String {'123'}

console.log(strObj[0]); // 1
console.log(strObj[1]); // 2
console.log(strObj[2]); // 3


console.log(strObj); // String {'123'}

  λ§Œμ•½ new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  String μƒμ„±μž ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ String μΈμŠ€ν„΄μŠ€κ°€ μ•„λ‹Œ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•œλ‹€. 이λ₯Ό μ΄μš©ν•˜μ—¬ λͺ…μ‹œμ μœΌλ‘œ νƒ€μž…μ„ λ³€ν™˜ν•˜κΈ°λ„ ν•œλ‹€.

console.log(String(1)); // '1'
console.log(String(NaN)); // 'NaN'
console.log(String(true)); // 'true'
console.log(String(false)); // 'false'

32.2 length ν”„λ‘œνΌν‹°

  length ν”„λ‘œνΌν‹°λŠ” λ¬Έμžμ—΄μ˜ 문자 개수λ₯Ό λ°˜ν™˜ν•œλ‹€.

console.log('hello'.length); // 5
console.log('hi'.length); // 2

String 래퍼 κ°μ²΄λŠ” λ°°μ—΄κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ length ν”„λ‘œνΌν‹°λ₯Ό κ°–λŠ”λ‹€. 그리고 인덱슀λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 숫자λ₯Ό ν”„λ‘œνΌν‹° ν‚€λ‘œ, 각 문자λ₯Ό ν”„λ‘œνΌν‹° κ°’μœΌλ‘œ κ°€μ§€λ―€λ‘œ String 래퍼 κ°μ²΄λŠ” μœ μ‚¬ λ°°μ—΄ 객체닀.

 

32.3 String λ©”μ„œλ“œ

  String κ°μ²΄μ—λŠ” 원본 String 래퍼 객체λ₯Ό 직접 λ³€κ²½ν•˜λŠ” λ©”μ„œλ“œλŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€. String 객체의 λ©”μ„œλ“œλŠ” μ–Έμ œλ‚˜ μƒˆλ‘œμš΄ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•œλ‹€. λ¬Έμžμ—΄μ€ λ³€κ²½ λΆˆκ°€λŠ₯ν•œ μ›μ‹œ 값이기 λ•Œλ¬Έμ— String 래퍼 객체도 읽기 μ „μš© 객체둜 μ œκ³΅λœλ‹€.

 

1) String.prototype.indeOf

λŒ€μƒ λ¬Έμžμ—΄μ—μ„œ 인수둜 전달받은 λ¬Έμžμ—΄μ„ κ²€μƒ‰ν•˜μ—¬ 첫 번째 인덱슀λ₯Ό λ°˜ν™˜

검색 μ‹€νŒ¨μ‹œ -1 λ°˜ν™˜

두 번째 인수둜 검색을 μ‹œμž‘ν•  인덱슀 전달(μ˜΅μ…˜)

 

2) String.prototype.search

λŒ€μƒ λ¬Έμžμ—΄μ—μ„œ 인수둜 전달받은 μ •κ·œ ν‘œν˜„μ‹κ³Ό λ§€μΉ˜ν•˜λŠ” λ¬Έμžμ—΄μ„ κ²€μƒ‰ν•˜μ—¬ μΌμΉ˜ν•˜λŠ” λ¬Έμžμ—΄μ˜ 인덱슀λ₯Ό λ°˜ν™˜

검색 μ‹€νŒ¨μ‹œ -1 λ°˜ν™˜

 

3) String.prototype.includes

λŒ€μƒ λ¬Έμžμ—΄μ— 인수둜 전달받은 λ¬Έμžμ—΄μ΄ ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜μ—¬ κ·Έ κ²°κ³Όλ₯Ό λΆˆλ¦¬μ–Έ κ°’μœΌλ‘œ λ°˜ν™˜

두 번째 인수둜 검색을 μ‹œμž‘ν•  인덱슀 전달(μ˜΅μ…˜)

 

4) String.prototype.startsWith

λŒ€μƒ λ¬Έμžμ—΄μ΄ 인수둜 전달받은 λ¬Έμžμ—΄λ‘œ μ‹œμž‘ν•˜λŠ”μ§€ ν™•μΈν•˜μ—¬ κ·Έ κ²°κ³Όλ₯Ό λΆˆλ¦¬μ–Έ κ°’μœΌλ‘œ λ°˜ν™˜

두 번째 인수둜 검색을 μ‹œμž‘ν•  인덱슀 전달(μ˜΅μ…˜)

 

5) String.prototype.endsWith

λŒ€μƒ λ¬Έμžμ—΄μ΄ 인수둜 전달받은 λ¬Έμžμ—΄λ‘œ λλ‚˜λŠ”μ§€ ν™•μΈν•˜μ—¬ κ·Έ κ²°κ³Όλ₯Ό λΆˆλ¦¬μ–Έ κ°’μœΌλ‘œ λ°˜ν™˜

두 번째 인수둜 검색할 λ¬Έμžμ—΄μ˜ 길이 전달(μ˜΅μ…˜)

 

6) String.prototype.charAt

λŒ€μƒ λ¬Έμžμ—΄μ—μ„œ 인수둜 전달받은 μΈλ±μŠ€μ— μœ„μΉ˜ν•œ 문자λ₯Ό κ²€μƒ‰ν•˜μ—¬ λ°˜ν™˜

 

7) String.prototype.substring

λŒ€μƒ λ¬Έμžμ—΄μ—μ„œ 첫 번째 인수둜 전달받은 μΈλ±μŠ€μ— μœ„μΉ˜ν•˜λŠ” λ¬ΈμžλΆ€ν„° 두 번째 인수둜 전달받은 μΈλ±μŠ€μ— μœ„μΉ˜ν•˜λŠ” 문자의 λ°”λ‘œ 이전 λ¬ΈμžκΉŒμ§€μ˜ λΆ€λΆ„ λ¬Έμžμ—΄μ„ λ°˜ν™˜(두 번째 μΈμˆ˜λŠ” μ˜΅μ…˜)

 

8) String.prototype.slice

substring λ©”μ„œλ“œμ™€ λ™μΌν•˜κ²Œ λ™μž‘(단, 음수인 인수λ₯Ό 전달할 수 μžˆλ‹€.)

 

9) String.prototype.toUpperCase

λŒ€μƒ λ¬Έμžμ—΄μ„ λͺ¨λ‘ λŒ€λ¬Έμžλ‘œ λ³€κ²½ν•œ λ¬Έμžμ—΄μ„ λ°˜ν™˜

 

10) String.prototype.toLowerCase

λŒ€μƒ λ¬Έμžμ—΄μ„ λͺ¨λ‘ μ†Œλ¬Έμžλ‘œ λ³€κ²½ν•œ λ¬Έμžμ—΄μ„ λ°˜ν™˜

 

11) String.prototype.trim

λŒ€μƒ λ¬Έμžμ—΄ μ•žλ’€μ— 곡백 λ¬Έμžκ°€ μžˆμ„ 경우 이λ₯Ό μ œκ±°ν•œ λ¬Έμžμ—΄μ„ λ°˜ν™˜

 

12) String.prototype.repeat

λŒ€μƒ λ¬Έμžμ—΄μ„ 인수둜 전달받은 μ •μˆ˜λ§ŒνΌ λ°˜λ³΅ν•΄ μ—°κ²°ν•œ μƒˆλ‘œμš΄ λ¬Έμžμ—΄μ„ λ°˜ν™˜

인수둜 전달받은 μ •μˆ˜κ°€ 0이면 빈 λ¬Έμžμ—΄ λ°˜ν™˜

음수면 RangeError λ°œμƒ

인수 μƒλž΅μ‹œ κΈ°λ³Έκ°’ 0 μ„€μ •

 

13) String.prototype.replace

λŒ€μƒ λ¬Έμžμ—΄μ— 첫 번째 인수둜 전달받은 λ¬Έμžμ—΄ λ˜λŠ” μ •κ·œν‘œν˜„μ‹μ„ κ²€μƒ‰ν•˜μ—¬ 두 번째 인수둜 μ „λ‹¬ν•œ λ¬Έμžμ—΄λ‘œ μΉ˜ν™˜ν•œ λ¬Έμžμ—΄μ„ λ°˜ν™˜

 

14) String.prototype.split

λŒ€μƒ λ¬Έμžμ—΄μ—μ„œ 첫 번째 인수둜 μ „λ‹¬ν•œ λ¬Έμžμ—΄ λ˜λŠ” μ •κ·œ ν‘œν˜„μ‹μ„ κ²€μƒ‰ν•˜μ—¬ λ¬Έμžμ—΄μ„ κ΅¬λΆ„ν•œ ν›„ λΆ„λ¦¬λœ 각 λ¬Έμžμ—΄λ‘œ 이루어진 λ°°μ—΄ λ°˜ν™˜

인수둜 빈 λ¬Έμžμ—΄ μ „λ‹¬ν•˜λ©΄ 각 문자λ₯Ό λͺ¨λ‘ λΆ„λ¦¬ν•˜κ³ , 인수λ₯Ό μƒλž΅ν•˜λ©΄ λŒ€μƒ λ¬Έμžμ—΄ 전체λ₯Ό 단일 μš”μ†Œλ‘œ ν•˜λŠ” λ°°μ—΄ λ°˜ν™˜

두 번째 인수둜 λ°°μ—΄μ˜ 길이 μ§€μ •(μ˜΅μ…˜)