ํ์ค ๋นํธ์ธ ๊ฐ์ฒด์ธ String์ ์์ ํ์ ์ธ ๋ฌธ์์ด์ ๋ค๋ฃฐ ๋ ์ ์ฉํ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
ํ์ค ๋นํธ์ธ ๊ฐ์ฒด์ธ String ๊ฐ์ฒด๋ ์์ฑ์ ํจ์ ๊ฐ์ฒด์ด๋ฏ๋ก new ์ฐ์ฐ์์ ํจ๊ป ํธ์ถํ์ฌ String ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ค.
String ์์ฑ์ ํจ์์ ์ธ์๋ฅผ ์ ๋ฌํ์ง ์๊ณ new ์ฐ์ฐ์์ ํจ๊ผ ํธ์ถํ๋ฉด [[StringData]] ๋ด๋ถ ์ฌ๋กฏ์ ๋น ๋ฌธ์์ด์ ํ ๋นํ String ๋ํผ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
const strObj = new String();
console.log(strObj); // String {length: 0, [{PrimitiveValue]}: ""}
String ์์ฑ์ ํจ์์ ์ธ์๋ก ๋ฌธ์์ด์ ์ ๋ฌํ๋ฉด์ new ์ฐ์ฐ์์ ํจ๊ป ํธ์ถํ๋ฉด [[StringData]] ๋ด๋ถ ์ฌ๋กฏ์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด์ ํ ๋นํ String ๋ํผ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
const strObj = new String('Lee');
console.log(strObj);
// String {0: "L", 1: "e", 2: "e", length: 3, [[PrimitiveValue]]: "Lee"}
String ๋ํผ ๊ฐ์ฒด๋ ๋ฐฐ์ด๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก length ํ๋กํผํฐ์ ์ธ๋ฑ์ค๋ฅผ ๋ํ๋ด๋ ์ซ์ ํ์์ ๋ฌธ์์ด์ ํ๋กํผํฐ ํค๋ก, ๊ฐ ๋ฌธ์๋ฅผ ํ๋กํผํฐ ๊ฐ์ผ๋ก ๊ฐ๋ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด์ด๋ฉด์ ์ดํฐ๋ฌ๋ธ์ด๋ค
๋ฐ๋ผ์ ๋ฐฐ์ด๊ณผ ์ ์ฌํ๊ฒ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๋ฌธ์์ ์ ๊ทผํ ์ ์๋ค.
๋ฌธ์์ด์ ์์ ๊ฐ์ด๋ฏ๋ก ๋ณ๊ฒฝXXX, ์๋ฌ ๋ฐ์ํ์ง ์๋๋ค.
// ๋ฌธ์์ด์ ์์ ๊ฐ์ด๋ฏ๋ก ๋ณ๊ฒฝํ ์ ์๋ค. ์ด๋ ์๋ฌ ๋ฐ์ X
strObj[0] = 'S';
console.log(strObj); // 'Lee'
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", : "l", length: 4, [[PrimitiveValue]]: "123"]
new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ String ์์ฑ์ ํจ์๋ฅผ ํธ์ถํ๋ฉด String ์ธ์คํด์ค๊ฐ ์๋ ๋ฌธ์์ด์ ๋ฐํํ๋ค.
// ์ซ์ ํ์
=> ๋ฌธ์์ด ํ์
String(1); // "1"
String(NaN); // 'NaN"
String(Infinity); // "Infinity"
// ๋ถ๋ฆฌ์ธ ํ์
=> ๋ฌธ์์ด ํ์
String(true); // "true"
String(false); // "false"
๋ฌธ์์ด์ ๋ฌธ์ ๊ฐ์๋ฅผ ๋ฐํ
'Hello'.length; // 5
'์๋
ํ์ธ์!'.length; // 6
String ๋ํผ ๊ฐ์ฒด๋ ๋ฐฐ์ด๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก length ํ๋กํผํฐ๋ฅผ ๊ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ๋ฑ์ค๋ฅผ ๋ํ๋ด๋ ์ซ์๋ฅผ ํ๋กํผํฐ ํค๋ก, ๊ฐ ๋ฌธ์๋ฅผ ํ๋กํผํฐ ๊ฐ์ผ๋ก ๊ฐ์ง๋ฏ๋ก String ๋ํผ ๊ฐ์ฒด๋ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด๋ค.
String ๊ฐ์ฒด์๋ ์๋ณธ String ๋ํผ ๊ฐ์ฒด๋ฅผ ์ง์ ๋ณ๊ฒฝํ๋ ๋ฉ์๋๋ ์กด์ฌํ์ง ์๋๋ค. ์ฆ
String ๊ฐ์ฒด์ ๋ฉ์๋๋ ์ธ์ ๋ ์๋ก์ด ๋ฌธ์์ด์ ๋ฐํ.
๋ฌธ์์ด์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์์ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ String ๋ํผ ๊ฐ์ฒด๋ ์ฝ๊ธฐ ์ ์ฉ ๊ฐ์ฒด๋ก ์ ๊ณต๋จ
indexOf ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด์ ๊ฒ์ํ์ฌ ์ฒซ ๋ฒ์จฐ ์ธ๋ฑ์ค๋ฅผ ๋ฐํ ๊ฒ์์ ์คํจํ๋ฉด -1์ ๋ฐํ
const str = 'Hello World';
// ๋ฌธ์์ด str์์ 'ใ
ฃ'์ ๊ฒ์ํ์ฌ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.
str.indexOf('l'); // 2
// ๋ฌธ์์ด str์์ 'or'์ ๊ฒ์ํ์ฌ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.
str.indexOf('or'); // 7
// ๋ฌธ์์ด str์์ 'x'์ ๊ฒ์ํ์ฌ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค. ์์ผ๋ฉด -1 ๋ฐํ
str.indexOf('x'); // -1
indexOf ๋ฉ์๋์ 2๋ฒ์งธ ์ธ์๋ก ๊ฒ์์ ์์ํ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌ
// ๋ฌธ์์ด str์ ์ธ๋ฑ์ค 3๋ถํฐ 'l'์ ๊ฒ์ํ์ฌ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๋ฐํ
str.indexOf('l',3); // 3
indexOf ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์ ํน์ ๋ฌธ์์ด์ด ์กด์ฌํ๋์ง ํ์ธํ ๋ ์ ์ฉ
if (str.indexOf('Hello') !== -1) {
// ๋ฌธ์์ด str์ 'Hello'๊ฐ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ์ ์ฒ๋ฆฌํ ๋ด์ฉ
ES6์์ ๋์ ๋ String.prototype.includes ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ์ข๋ค
if (str.includes('Hello')){
// ๋ฌธ์์ด str์ 'Hello'๊ฐ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ์ ์ฒ๋ฆฌํ ๋ด์ฉ
}
search ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ ๊ท ํํ์๊ณผ ๋งค์นํ๋ ๋ฌธ์์ด์ ๊ฒ์ํ์ฌ ์ผ์นํ๋ ๋ฌธ์์ด์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํ ๊ฒ์์ ์คํจํ๋ฉด -1
ES6์์ ๋์ ๋ includes ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด์ด ํฌํจ๋์ด ์๋์ง ํ์ธํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ true ๋๋ false๋ก ๋ฐํ
includes ๋ฉ์๋์ 2๋ฒ์งธ ์ธ์๋ก ๊ฒ์์ ์์ํ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌํ ์ ์๋ค.
ES6์์ ๋์ ๋ startsWith ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์ด ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด๋ก ์์ํ๋์ง ํ์ธํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ true ๋๋ false๋ก ๋ฐํํ๋ค.
startsWith ๋ฉ์๋์ 2๋ฒ์งธ ์ธ์๋ก ๊ฒ์์ ์์ํ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌํ ์ ์๋ค.
ES6์์ ๋์ ๋ endsWith ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์ด ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด๋ก ๋๋๋์ง ํ์ธํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ true ๋๋ false๋ก ๋ฐํ.
endsWith ๋ฉ์๋์ 2๋ฒ์จฐ ์ธ์๋ก ๊ฒ์ํ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ ๋ฌํ ์ ์๋ค.
charAt ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ธ๋ฑ์ค์ ์์นํ ๋ฌธ์๋ฅผ ๊ฒ์ํ์ฌ ๋ฐํํ๋ค.
์ธ๋ฑ์ค๋ ๋ฌธ์์ด์ ๋ฒ์, ์ฆ 0 ~ (๋ฌธ์์ด ๊ธธ์ด -1) ์ฌ์ด์ ์ ์์ด์ด์ผ ํ๋ค. ์ธ๋ฑ์ค๊ฐ ๋ฌธ์์ด์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์ ์์ธ ๊ฒฝ์ฐ ๋น ๋ฌธ์์ด์ ๋ฐํ
substring ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ธ๋ฑ์ค์ ์์นํ๋ ๋ฌธ์๋ถํฐ ๋ ๋ฒ์จฐ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ธ๋ฑ์ค์ ์์นํ๋ ๋ฌธ์์ ๋ฐ๋ก ์ด์ ๋ฌธ์๊น์ง์ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํ
const str = 'Hello World';
// ์ธ๋ฑ์ค 1๋ถํฐ ์ธ๋ฑ์ค 4 ์ด์ ๊น์ง์ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํ
str.substring(1,4); // ell
substring ๋ฉ์๋์ ๋ ๋ฒ์จฐ ์ธ์๋ ์๋ต๊ฐ๋ฅ, ์ด๋ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌํ ์ธ๋ฑ์ค์ ์์นํ๋ ๋ฌธ์๋ถํฐ ๋ง์ง๋ง ๋ฌธ์๊น์ง ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํ.
const str = 'Hello World';
// ์ธ๋ฑ์ค 1๋ถํฐ ๋ง์ง๋ง ๋ฌธ์๊น์ง ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํํ๋ค.
str.substring(1); // 'ello world'
slice ๋ฉ์๋๋ substring ๋ฉ์๋์ ๋์ผํ๊ฒ ๋์ํ๋ค. ๋จ
slice ๋ฉ์๋์๋ ์์์ธ ์ธ์๋ฅผ ์ ๋ฌํ ์ ์๋ค.
์์์ธ ์ธ์๋ฅผ ์ ๋ฌํ๋ฉด ๋์ ๋ฌธ์์ด์ ๊ฐ์ฅ ๋ค์์๋ถํฐ ์์ํ์ฌ ๋ฌธ์์ด์ ์๋ผ๋ด์ด ๋ฐํํ๋ค.
toUpperCase ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์ ๋ชจ๋ ๋๋ฌธ์๋ก ๋ณ๊ฒฝํ ๋ฌธ์์ด์ ๋ฐํ
toLowerCase ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์ ๋ชจ๋ ์๋ฌธ์๋ก ๋ณ๊ฒฝํ ๋ฌธ์์ด์ ๋ฐํ
trim ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด ์๋ค์ ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ์์ ๊ฒจ์ ์ด๋ฅผ ์ ๊ฑฐํ ๋ฌธ์์ด์ ๋ฐํ
const str = ' foo '' ;
str.trim(); // 'foo'
String.prototype.trimStart, String.prototype.trimEnd๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ ๋ฌธ์์ด ์ ๋๋ ๋ค์ ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ์์ ๊ฒฝ์ฐ ์ด๋ฅผ ์ ๊ฑฐํ ๋ฌธ์์ด์ ๋ฐํ.
ES6์์ ๋์ ๋ repeat ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ ์๋งํผ ๋ฐ๋ณตํด ์ฐ๊ฒฐํ ์๋ก์ด ๋ฌธ์์ด์ ๋ฐํ.
์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ ์๊ฐ 0์ด๋ฉด ๋น ๋ฌธ์์ด์ ๋ฐํ
ํ๊ณ ,์์์ด๋ฉด RangeError๋ฅผ ๋ฐ์
์ธ์๋ฅผ ์๋ตํ๋ฉด ๊ธฐ๋ณธ๊ฐ 0์ด ์ค์
replace ๋ฉ์๋๋ ๋์ ๋ฌธ์์ด์์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด ๋๋ ์ ๊ทํํ์์ ๊ฒ์ํ์ฌ ๋ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌํ ๋ฌธ์์ด๋ก ์นํํ ๋ฌธ์์ด์ ๋ฐํ
const str = 'Hello world';
// str์์ ์ฒซ ๋ฒ์งธ ์ธ์ 'world'๋ฅผ ๊ฒ์ํ์ฌ ๋ ๋ฒ์งธ ์ธ์ 'Lee'๋ก ์นํํ๋ค
str.replace('world','Lee'); // Hello Lee
๊ฒ์๋ ๋ฌธ์์ด์ด ์ฌ๋ฟ ์กด์ฌํ ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ๋ก ๊ฒ์๋ ๋ฌธ์์ด๋ง ์นํ
const str = 'Hello world';
str.replace('world', 'Lee'); // Hello Lee world
split ๋ฉ์๋
๋ ๋์ ๋ฌธ์์ด์์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌํ ๋ฌธ์์ด ๋๋ ์ ๊ท ํํ์์ ๊ฒ์ํ์ฌ ๋ฌธ์์ด์ ๊ตฌ๋ถํ ํ ๋ถ๋ฆฌ๋ ๊ฐ ๋ฌธ์์ด๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์ ๋ฐํํ๋. ์ธ์๋ก ๋น ๋ฌธ์์ด์ ์ ๋ฌํ๋ฉด ๊ฐ ๋ฌธ์๋ฅผ ๋ชจ๋ ๋ถ๋ฆฌํ๊ณ , ์ธ์๋ฅผ ์๋ฝํ๋ฉด ๋์ ๋ฌธ์์ด ์ ์ฒด๋ฅผ ๋จ์ผ ์์๋ก ํ๋ ๋ฐฐ์ด์ ๋ฐํ.