๊ด€๋ฆฌ ๋ฉ”๋‰ด

Daehyunii's Dev-blog

32์žฅ String ๋ณธ๋ฌธ

ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด์ธ 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

๋Œ€์ƒ ๋ฌธ์ž์—ด์—์„œ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ๋ฌธ์ž์—ด ๋˜๋Š” ์ •๊ทœ ํ‘œํ˜„์‹์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ๊ตฌ๋ถ„ํ•œ ํ›„ ๋ถ„๋ฆฌ๋œ ๊ฐ ๋ฌธ์ž์—ด๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด ๋ฐ˜ํ™˜

์ธ์ˆ˜๋กœ ๋นˆ ๋ฌธ์ž์—ด ์ „๋‹ฌํ•˜๋ฉด ๊ฐ ๋ฌธ์ž๋ฅผ ๋ชจ๋‘ ๋ถ„๋ฆฌํ•˜๊ณ , ์ธ์ˆ˜๋ฅผ ์ƒ๋žตํ•˜๋ฉด ๋Œ€์ƒ ๋ฌธ์ž์—ด ์ „์ฒด๋ฅผ ๋‹จ์ผ ์š”์†Œ๋กœ ํ•˜๋Š” ๋ฐฐ์—ด ๋ฐ˜ํ™˜

๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ๋ฐฐ์—ด์˜ ๊ธธ์ด ์ง€์ •(์˜ต์…˜)