32μž₯ String

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

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

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

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

const strObj = new String();
console.log(strObj); // String {length: 0, [[PrimitiveValue]]: ""}

const strObj2 = new String('Han');
console.log(strObj2); // {0: "H", 1: "a", 2: "n", length: 3, [[PrimitiveValue]]: "Han"}

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

단, λ¬Έμžμ—΄μ€ μ›μ‹œ κ°’μœΌλ‘œ λ³€κ²½ν•  수 μ—†λ‹€.

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

let strObj = new String(123);
console.log(strObj)
//String {0: "1", 1: "2", 2: "3", length: 3, [[PrimitiveValue]]: "123" }

strObj = new String(null);
console.log(strObj);
//String {0: "n", 1: "u", 2: "l", 3: "l", length: 4, [[PrimitiveValue]]: "null"}

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

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

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

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

32.3 String λ©”μ„œλ“œ

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

λ§Œμ•½ String 래퍼 객체가 읽기 μ „μš© 객체가 μ•„λ‹ˆλ©΄, λ³€κ²½λœ String 래퍼 객체λ₯Ό λ¬Έμžμ—΄λ‘œ 되돌릴 λ•Œ λ¬Έμžμ—΄μ΄ λ³€κ²½λœλ‹€. λ”°λΌμ„œ String 객체의 λͺ¨λ“  λ©”μ„œλ“œλŠ” String 래퍼 객체λ₯Ό 직접 λ³€κ²½ν•  수 μ—†κ³ , String 래퍼 객체의 λ©”μ„œλ“œλŠ” μ–Έμ œλ‚˜ μƒˆλ‘œμš΄ λ¬Έμžμ—΄μ„ μƒμ„±ν•˜μ—¬ λ°˜ν™˜ν•œλ‹€.

32.3.1 String.prototype.indexOf

indexOf λ©”μ„œλ“œλŠ” λŒ€μƒ λ¬Έμžμ—΄μ—μ„œ 인수둜 전달받은 λ¬Έμžμ—΄μ„ 검색해 첫 번째 인덱슀λ₯Ό λ°˜ν™˜ν•œλ‹€. 검색에 μ‹€νŒ¨ν•˜λ©΄ -1을 λ°˜ν™˜ν•œλ‹€.

indexOf λ©”μ„œλ“œλŠ” λŒ€μƒ λ¬Έμžμ—΄μ— νŠΉμ • λ¬Έμžμ—΄μ΄ μ‘΄μž¬ν•˜λŠ”μ§€ 확인할 λ•Œ μœ μš©ν•˜λ‹€.

ES6μ—μ„œ λ„μž…λœ String.prototype.includes λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ 가독성이 더 μ’‹λ‹€.

32.3.2 String.prototype.search

λŒ€μƒ λ¬Έμžμ—΄μ—μ„œ 인수둜 전달받은 μ •κ·œ ν‘œν˜„μ‹κ³Ό λ§€μΉ˜ν•˜λŠ” λ¬Έμžμ—΄μ„ 검색해 μΌμΉ˜ν•˜λŠ” λ¬Έμžμ—΄μ˜ 인덱슀λ₯Ό λ°˜ν™˜ν•œλ‹€. 검색에 μ‹€νŒ¨ν•˜λ©΄ -1을 λ°˜ν™˜ν•œλ‹€.

32.3.3 String.prototype.includes

ES6μ—μ„œ λ„μž…λœ includes λ©”μ„œλ“œλŠ” λŒ€μƒ λ¬Έμžμ—΄μ— 인수둜 전달받은 λ¬Έμžμ—΄μ΄ ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜μ—¬ κ·Έ κ²°κ³Όλ₯Ό true λ˜λŠ” false 둜 λ°˜ν™˜ν•œλ‹€. 2번째 인수둜 검색 μ‹œμž‘ 인덱슀λ₯Ό 전달할 수 μžˆλ‹€.

32.3.4 String.prototype.startsWith

ES6μ—μ„œ λ„μž…λœ startsWith λ©”μ„œλ“œλŠ” λŒ€μƒ λ¬Έμžμ—΄μ΄ 인수둜 전달받은 λ¬Έμžμ—΄λ‘œ μ‹œμž‘ν•˜λŠ”μ§€ ν™•μΈν•˜μ—¬ true λ˜λŠ” falseλ₯Ό λ°˜ν™˜ν•œλ‹€. 2번째 인수둜 검색 μ‹œμž‘ 인덱슀λ₯Ό 전달할 수 μžˆλ‹€.

32.3.5 String.prototype.endsWith

ES6μ—μ„œ λ„μž…λœ endsWith λ©”μ„œλ“œλŠ” λŒ€μƒ λ¬Έμžμ—΄μ΄ 인수둜 전달받은 λ¬Έμžμ—΄λ‘œ λλ‚˜λŠ”μ§€ ν™•μΈν•˜μ—¬ true λ˜λŠ” falseλ₯Ό λ°˜ν™˜ν•œλ‹€. 2번째 인수둜 검색할 λ¬Έμžμ—΄μ˜ 길이λ₯Ό 전달할 수 μžˆλ‹€.

32.3.6 String.prototype.charAt

λŒ€μƒ λ¬Έμžμ—΄μ—μ„œ 인수둜 전달받은 μΈλ±μŠ€μ— μœ„μΉ˜ν•œ 문자λ₯Ό κ²€μƒ‰ν•˜μ—¬ λ°˜ν™˜ν•œλ‹€. μΈλ±μŠ€λŠ” λ¬Έμžμ—΄μ˜ λ²”μœ„ (0 ~ λ¬Έμžμ—΄ 길이-1) μ‚¬μ΄μ˜ μ •μˆ˜μ—¬μ•Ό ν•œλ‹€. μΈλ±μŠ€κ°€ λ¬Έμžμ—΄μ˜ λ²”μœ„λ₯Ό λ²—μ–΄λ‚œ μ •μˆ˜μΈ 경우 빈 λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•œλ‹€.

32.3.7 String.prototype.substring

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

indexOf λ©”μ„œλ“œμ™€ ν•¨κ»˜ μ‚¬μš©ν•˜λ©΄ νŠΉμ • λ¬Έμžμ—΄μ„ κΈ°μ€€μœΌλ‘œ μ•žλ’€μ— μœ„μΉ˜ν•œ λΆ€λΆ„ λ¬Έμžμ—΄μ„ μ·¨ν•  수 μžˆλ‹€.

32.3.8 String.prototype.slice

substring λ©”μ„œλ“œμ™€ λ™μΌν•˜κ²Œ μž‘λ™ν•œλ‹€. 단, slice λ©”μ„œλ“œμ—λŠ” 음수인 인수λ₯Ό 전달해 λ’€μ—μ„œλΆ€ν„° λ¬Έμžμ—΄μ„ 자λ₯Ό 수 μžˆλ‹€.

32.3.9 String.prototype.toUpperCase

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

32.3.10 String.prototype.toLowerCase

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

32.3.11 String.prototype.trim

λŒ€μƒ λ¬Έμžμ—΄ μ•ž λ’€ 곡백 문자λ₯Ό μ œκ±°ν•œ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•œλ‹€.

trimStart, trimEnd λ₯Ό μ‚¬μš©ν•΄ μ•ž λ’€ 곡백을 μ œκ±°ν•  수 μžˆλ‹€.

32.3.12 String.prototype.repeat

ES6μ—μ„œ λ„μž…λœ repeat λ©”μ„œλ“œλŠ” λŒ€μƒ λ¬Έμžμ—΄μ„ 인수둜 전달받은 μ •μˆ˜λ§ŒνΌ λ°˜λ³΅ν•΄ μ—°κ²°ν•œ μƒˆλ‘œμš΄ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•œλ‹€. 인수둜 전달받은 μ •μˆ˜κ°€ 0 이면 빈 λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•˜κ³ , 음수이면 RangeErrorλ₯Ό λ°œμƒμ‹œν‚¨λ‹€. 인수λ₯Ό μƒλž΅ν•˜λ©΄ 기본값은 0이닀.

32.3.13 String.prototype.replace

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

두 번째 인수둜 μΉ˜ν™˜ ν•¨μˆ˜λ₯Ό 전달할 μˆ˜λ„ μžˆλ‹€. 첫 번째 인수둜 μ „λ‹¬ν•œ λ¬Έμžμ—΄ λ˜λŠ” μ •κ·œ ν‘œν˜„μ‹μ— λ§€μΉ˜ν•œ κ²°κ³Όλ₯Ό 두 번째 인수인 μΉ˜ν™˜ ν•¨μˆ˜μ˜ 인수둜 μ „λ‹¬ν•˜λ©΄μ„œ ν˜ΈμΆœν•˜κ³ , μΉ˜ν™˜ ν•¨μˆ˜κ°€ λ°˜ν™˜ν•œ 결과에 맀치 κ²°κ³Όλ₯Ό μΉ˜ν™˜ν•œλ‹€.

32.3.14 String.prototype.split

λŒ€μƒ λ¬Έμžμ—΄μ—μ„œ 첫 번째 인수둜 μ „λ‹¬ν•œ λ¬Έμžμ—΄ λ˜λŠ” μ •κ·œ ν‘œν˜„μ‹μ„ 검색해 λ¬Έμžμ—΄μ„ κ΅¬λΆ„ν•œ ν›„ λΆ„λ¦¬λœ 각 λ¬Έμžμ—΄λ‘œ 이루어진 배열을 λ°˜ν™˜ν•œλ‹€. 인수둜 빈 λ¬Έμžμ—΄μ„ μ „λ‹¬ν•˜λ©΄ 각 문자λ₯Ό λͺ¨λ‘ λΆ„λ¦¬ν•˜κ³ , 인수λ₯Ό μƒλž΅ν•˜λ©΄ λŒ€μƒ λ¬Έμžμ—΄ 전체λ₯Ό 단일 μš”μ†Œλ‘œ ν•˜λŠ” 배열을 λ°˜ν™˜ν•œλ‹€.

Last updated

Was this helpful?