๐ String ์์ฑ์ ํจ์
const strObj = new String();
console.log(strObj);
// String{length: 0, [[PrimitiveValue]]: ""}
// [[PrimitiveValue]]๋ [[StringData]] ๋ด๋ถ ์ฌ๋กฏ์ด๋ค
โ String ์์ฑ์ ํจ์์ ์ธ์๋ฅผ ์ ๋ฌํ์ง ์๊ณ new ์ฐ์ฐ์์ ํจ๊ป ํธ์ถํ๋ฉด,
[ [ StringData ] ] ๋ด๋ถ ์ฌ๋กฏ์ ๋น ๋ฌธ์์ด์ ํ ๋นํ String ๋ํผ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
String ๋ํผ ๊ฐ์ฒด === ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด
const strObj = new String('Lee');
console.log(strObj);
// String{0:"L", 1:"e", 2:"e", length: 3, [[PrimitiveValue]]: "Lee"}
โ ๋ฐฐ์ด๊ณผ ์ ์ฌํ๊ฒ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๋ฌธ์์ ์ ๊ทผํ ์ ์๋ค
โ ๋จ, ๋ฌธ์์ด์ ์์ ๊ฐ์ด๋ฏ๋ก ๋ณ๊ฒฝํ ์ ์๋ค
console.log(strObj[0]); // L
strObj[0] = 'S' // ์ฌํ ๋น ๋น์ทํ๊ฒ ํด์คฌ๋๋ฐ, ์๋ณํจ
console.log(strObj); // 'Lee'
โ ์์ฑ์ ํจ์์ ์ธ์๋ก ๋ฌธ์์ด์ด ์๋ ๊ฐ์ ์ ๋ฌํ๋ฉด, ์ธ์๋ฅผ ๊ฐ์ ๋ก ๋ฌธ์์ด๋ก ๋ณํ ํ String ๋ํผ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
let strObj = new Sting(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 ์์ฑ์ ํจ์๋ฅผ ํธ์ถํ๋ฉด, String ์ธ์คํด์ค๊ฐ ์๋ ๋ฌธ์์ด์ ๋ฐํํ๋ค.
// ์ซ์ -> ๋ฌธ์์ด
String(1); // "1"
String(NaN); // "NaN"
String(Infinity); // "Infinity"
// ๋ถ๋ฆฌ์ธ -> ๋ฌธ์์ด
String(true); // "true"
String(false); // "false"
๐ length ํ๋กํผํฐ
'Hello'.length; // 5
'์๋
ํ์ธ์'.length; // 6
๐ String ๋ฉ์๋
๋ฐฐ์ด์๋ ์๋ณธ ๋ฐฐ์ด์ ์ง์ ๋ณ๊ฒฝํ๋ ๋ฉ์๋mutator method ์
์๋ณธ ๋ฐฐ์ด์ ์ง์ ๋ณ๊ฒฝํ์ง ์๊ณ , ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ์ฌ ๋ฐํํ๋ ๋ฉ์๋accessor method๊ฐ ์๋ค.
ํ์ง๋ง ๋ฌธ์์ด์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํimmutable ์์๊ฐ์ด๊ธฐ ๋๋ฌธ์, String ๊ฐ์ฒด๋ ์ธ์ ๋ ์๋ก์ด ๋ฌธ์์ด์ ๋ฐํํ๋ค.
String ๋ํผ ๊ฐ์ฒด๋ ์ฝ๊ธฐ ์ ์ฉread only ๊ฐ์ฒด๋ก ์ ๊ณต๋๋ค.
โพ indexOf
// ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด์ ๊ฒ์ํ์ฌ, ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.
// ๊ฒ์์ ์คํจํ๋ฉด -1์ ๋ฐํํ๋ค.
// ๊ฒ์์ ์์ํ๋ ์์น๋ ์ง์ ํ ์ ์๋ค.
const str = 'Hello world';
str.indexOf('l'); // 2
str.indexOf('or'); // 7
str.indexOf('x'); // -1
str.indexOf('l', 3); // 3
โพ search
// ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ ๊ท ํํ์๊ณผ ๋งค์นํ๋ ๋ฌธ์์ด์ ๊ฒ์ํ์ฌ, ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.
// ๊ฒ์์ ์คํจํ๋ฉด -1์ ๋ฐํํ๋ค.
const str = 'Hello world';
str.search(/o/); // 4
str.search(/x/); // -1
โพ includes
// ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด์ด ํฌํจ๋์ด ์๋ ์ง ํ์ธํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ true/false๋ก ๋ฐํํ๋ค.
// ๊ฒ์์ ์์ํ๋ ์์น๋ ์ง์ ํ ์ ์๋ค.
const str = 'Hello world';
str.includes('Hello'); // true
str.includes(''); // true
str.includes('x'); // false
str.includes(); // false
str.includes('l', 3); // true
str.includes('H', 3); // false
โพ startsWith
// ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด๋ก ์์ํ๋ ์ง ํ์ธํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ true/false๋ก ๋ฐํํ๋ค.
// ๊ฒ์์ ์์ํ๋ ์์น๋ ์ง์ ํ ์ ์๋ค.
const str = 'Hello world'
str.startsWith('He'); // true
str.startsWith('x'); // false
str.startsWith(' ', 5); // true
โพ endsWith
// ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด๋ก ๋๋๋ ์ง ํ์ธํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ true/false๋ก ๋ฐํํ๋ค.
// ๊ฒ์์ ๋ฒ์๋ฅผ ๋ฌธ์์ด์ ๊ธธ์ด๋ก ์ง์ ํ ์ ์๋ค.
const str = 'Hello world'
str.endssWith('Id'); // true
str.endsWith('x'); // false
str.endsWith('lo', 5); // true
// ๋ฌธ์์ด str์ ์ฒ์๋ถํฐ 5์๋ฆฌ๊น์ง('Hello')๊ฐ 'lo'๋ก ๋๋๋์ง ํ์ธ
โพ charAt
// ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ธ๋ฑ์ค์ ์์นํ ๋ฌธ์๋ฅผ ๊ฒ์ํ์ฌ ๋ฐํํ๋ค.
// ์ธ๋ฑ์ค๊ฐ ๋ฌธ์์ด์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ, ๋น ๋ฌธ์์ด์ ๋ฐํํ๋ค.
const str = 'Hello'
for (let i=0; i<str.length; i++){
console.log(str.charAt(i)); // H e l l o
}
str.charAt(5); // ''
โพ substring
// (1, 4) -> 1 <= x < 4 ์ ์ธ๋ฑ์ค์ ํด๋นํ๋ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํํ๋ค.
// ์ธ์1 > ์ธ์2 -> ๋ ์ธ์๋ ๊ตํ๋๋ค.
// ์ธ์ < 0 || NaN -> ์ธ์ === 0์ผ๋ก ์ทจ๊ธ๋๋ค.
// ์ธ์ > str.length -> ์ธ์ === str.length๋ก ์ทจ๊ธ๋๋ค.
const str = 'Hello world'
str.substring(1, 4); // 'ell'
str.substring(1); // 'ello world'
str.substring(4, 1); // 'ell'
str.substring(-2); // 'Hello world'
str.substring(1, 100); // 'ello world'
str.substring(20); // ''
โพ slice
// substring ๋ฉ์๋์ ๋์ผํ๊ฒ ์๋ํ๋ค.
// ๋จ, slice ๋ฉ์๋๋ ์์๋ฅผ ์ธ์๋ก ์ ๋ฌํ ์ ์๋ค !
// ์์๋ฅผ ์ธ์๋ก ์ ๋ฌํ๋ฉด, ๋์ ๋ฌธ์์ด์ ๊ฐ์ฅ ๋ค์์๋ถํฐ ์์ํ์ฌ ๋ฌธ์์ด์ ์๋ผ๋ด์ด ๋ฐํํ๋ค.
const str = 'Hello world';
str.substring(0, 5); // 'Hello'
str.slice(0, 5); // 'Hello'
str.substring(2); // 'llo world'
str.slice(2); // 'llo world'
str.substring(-5); // 'Hello world'
str.slice(-5); // 'world'
โพ toUpperCase
// ๋์ ๋ฌธ์์ด์ ๋ชจ๋ ๋๋ฌธ์๋ก ๋ณ๊ฒฝํ ๋ฌธ์์ด์ ๋ฐํํ๋ค.
const str = 'Hello world';
str.toUpperCase(); // 'HELLO WORLD'
โพ toLowerCase
// ๋์ ๋ฌธ์์ด์ ๋ชจ๋ ์๋ฌธ์๋ก ๋ณ๊ฒฝํ ๋ฌธ์์ด์ ๋ฐํํ๋ค.
const str = 'Hello World'
str.toLowerCase(); // 'hello world'
โพ trim
// ๋์ ๋ฌธ์์ด ์ ๋ค์ ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ์์ ๊ฒฝ์ฐ, ์ด๋ฅผ ์ ๊ฑฐํ ๋ฌธ์์ด์ ๋ฐํํ๋ค.
const str = ' foo '
str.trim(); // 'foo'
str.trimStart(); // 'foo '
str.trimEnd(); // ' foo'
// ์ ๊ท ํํ์์ ์ด์ฉํด์ ๊ณต๋ฐฑ ์ ๊ฑฐํ๊ธฐ
str.replace(/\s/g, ''); // 'foo'
str.replace(/^\s+/g, ''); // 'foo '
str.replace(/\s/+$/g, ''); // ' foo'
โพ repeat
// ๋์ ๋ฌธ์์ด์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ ์๋งํผ ๋ฐ๋ณตํด ์ฐ๊ฒฐํ, ์๋ก์ด ๋ฌธ์์ด์ ๋ฐํํ๋ค.
// ์
๋ ฅ๋ฐ์ ์ ์๊ฐ ์๊ฑฐ๋ 0์ด๋ฉด ๋น ๋ฌธ์์ด์ ๋ฐํํ๋ค.
// ์
๋ ฅ๋ฐ์ ์ ์๊ฐ ์์๋ฉด RangeError ๋ฐ์์ํจ๋ค.
const str = 'abc';
str.repeat(); // ''
str.repeat(0); // ''
str.repeat(2); // 'abcabc'
str.repeat(2.5); // 'abcabc'
str.repeat(-1); // RangeError: Invalid count value
โพ replace
// ์ฒซ ๋ฒ์งธ ์ธ์(๋ฌธ์์ด/์ ๊ทํํ์)๋ฅผ ๊ฒ์ํ์ฌ, ๋ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌํ ๋ฌธ์์ด๋ก ์นํํ ๋ฌธ์์ด์ ๋ฐํํ๋ค.
// ๊ฒ์๋ ๋ฌธ์์ด์ด ์ฌ๋ฟ ์กด์ฌํ ๊ฒฝ์ฐ, ์ฒซ ๋ฒ์งธ๋ก ๊ฒ์๋ ๋ฌธ์์ด๋ง ์นํํ๋ค.
const str = 'Hello world';
str.replace('world', 'Lee'); // 'Hello Lee'
str.replace(/hello/gi, 'Lee'); // 'Lee world'
// ์นด๋ฉ ์ผ์ด์ค -> ์ค๋ค์ดํฌ ์ผ์ด์ค ๋ณํ
function camelToSnake(camelCase){
return camelCase.replace(/.[A-Z]/g, match => {
console.log(match);
return match[0] + '_' + match[1].toLowerCase();
});
}
const camelCase = 'helloWorld'
camelToSnake(camelCase); // 'hello_world'
// ์ค๋ค์ดํฌ ์ผ์ด์ค -> ์นด๋ฉ ์ผ์ด์ค ๋ณํ
function snakeToCamel(snakeCase){
return snakeCase.replace(/_[a-z]/g, match => {
console.log(match);
return match[1].toUpperCase();
});
}
const snakeCase = 'hello_world';
snakeToCamel(snakeCase); // 'helloWorld'
โพ split
// ์ฒซ ๋ฒ์งธ ์ธ์(๋ฌธ์์ด/์ ๊ท ํํ์)๋ฅผ ๊ฒ์ํ์ฌ, ๋ฌธ์์ด์ ๊ตฌ๋ถํ ํ
// ๋ถ๋ฆฌ๋ ๋ฌธ์์ด๋ก ์ด๋ฃจ์ด์ง "๋ฐฐ์ด"์ ๋ฐํํ๋ค.
// ์ธ์๋ก ๋น ๋ฌธ์์ด์ ์ ๋ฌํ๋ฉด, ๊ฐ ๋ฌธ์๋ฅผ ๋ชจ๋ ๋ถ๋ฆฌํ๋ค.
// ์ธ์๋ฅผ ์๋ตํ๋ฉด, ๋์ ๋ฌธ์์ด ์ ์ฒด๋ฅผ ๋จ์ผ ์์๋ก ํ๋ ๋ฐฐ์ด์ ๋ฐํํ๋ค.
const str = 'How are you doing?';
str.split(' '); // ["How", "are", "you", "doing?"]
str.split(/\s/); // ["How", "are", "you", "doing?"]
str.split(''); // ["H", "o", "w", " ", "a", "r", "e", " ", "y", "o", "u", " ", "d", "o", "i", "n", "g", "?"]
str.split(); // ["How are you doing?"]
// ๋ ๋ฒ์งธ ์ธ์๋ก ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ์ ํ ์ ์๋ค.
str.split(' ', 3); // ["How", "are", "you"]
// split ๋ฉ์๋๋ "๋ฐฐ์ด"์ ๋ฐํํ๋ค.
function reverseString(str){
return str.split('').reverse().join('');
}
reverseString('Hello world'); // '!dlrow olleH'
์ถ์ฒ
๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive - ์ด์ ๋ชจ
'Front-end > JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฐ์ด Array (0) | 2021.08.13 |
---|---|
์๋ฐ์คํฌ๋ฆฝํธ ์์ ํ์ & ๊ฐ์ฒด ํ์ Primitive type & Reference type (0) | 2021.08.12 |
์๋ฐ์คํฌ๋ฆฝํธ ์ ์ด๋ฌธ Control flow statement (0) | 2021.07.23 |
์๋ฐ์คํฌ๋ฆฝํธ ํจ์ Function (0) | 2021.07.22 |
์๋ฐ์คํฌ๋ฆฝํธ ํํ์ & ๋ฌธ (0) | 2021.07.21 |
๋๊ธ