문자열은 굉장히 특이하다. primitive 값이면서 객체처럼 메서드 사용이 가능한 것인데 그이유는 따로 있다. 문자열에 메서드 사용을 할때마다 String객체로 불려오기 때문에 String 객체로서 메서드를 사용하고 반환될때에는 다시 primitive 값으로 형변환이 되기때문이다.
더 자세히 들어가자면 hint라는 속성이 있다.
hint라고 하는 것은 객체가 목표로하는 자료형 이라는 뜻으로 객체가 primitive 자료형으로 형변환을 할때 이 hint에서 목적성을 얻어 형변환을 한다. 이렇게 객체가 자동으로 primitive 자료형으로 형변환을 할때 hint를 참고해서 변환을 실시한다.
Symbol.toPrimitive(함수 값으로 사용) 특성, 목적은 기본 값으로 변환 할 수있다. 이 함수는 hint결과 프리미티브 값의 선호 유형을 지정 하는 문자열 인수로 호출됩니다 . hint인수는 "중 하나가 될 수 있습니다 number", " string" "및 default".
const object1 = { [Symbol.toPrimitive](hint) { if (hint === 'number') { return 42; } return null; } }; console.log(+object1); // expected output: 42
const str = 'doodream';
console.log(str[0]); // d
console.log(str.length); // 8
console.log(str.indexOf('d')); // 0
console.log(str.lastIndexOf('d')); // 3
// slice 앞에서 3번째 다음부터 끝까지
console.log(str.slice(3)); // dream
// slice 뒤에서 5번째 부터 끝까지
console.log(str.slice(-5)); // dream
// slice index 0 부터 index - 1 까지
console.log(str.slice(0, 3)); // doo
console.log(str.toUpperCase()); // 전부 대문자로
console.log(str.toLowerCase()); // 전부 소문자로
const email = 'doodream@naver.com';
const nickEmail = ' Doodream@naver.com \n';
console.log(nickEmail.trim()); // 앞뒤 공백만 없얘준다.
console.log(email === nickEmail.toLowerCase().trim()); // true
const specialEmail = email.replace('@', '$');
console.log(specialEmail);
// 문자열을 해당 문자열로 바꿔준다.
// replace는 첫번째로 찾은 문자열을 바꿔줄뿐 모두 바꾸려면 정규식이 필요하다.
console.log(email.replace(/o/g, 'a'));
// daadream@naver.com
// 정규식 /string/flag 으로 o 전체를 'a'로 바꾸기
console.log(email.replaceAll('o','a');
// 위 코드와 동일한 효과
console.log(email.includes('doodream'));
// true 문자열이 들어있는지 확인
console.log(email.startsWith('doo'));
// true 해당 문자열로 시작하는지 확인
console.log(email.endsWith('com'));
// true 해당 문자열로 끝나는지 확인
console.log(email.split('@'));
// [doodream, naver.com] 해당문자열로 본 문자열을 분해하여 배열로 반환
const emailInfo = email.split('@');
console.log(emailInfo.join('@'));
// 'doodream@naver.com' split()의 반대로 문자열 배열을 매개변수로 받은 문자열로 붙여서 하나의 문자열로 반환
console.log(email.padStart(25, '*'));
// *******doodream@naver.com
//총문자열의 길이가 25 만큼 되도록 앞에 * 을 넣어라
console.log(email.padEnd(25, '*'));
// doodream@naver.com*******
// 총문자열의 길이가 25 만큼 되도록 뒤에 * 을 넣어라
console.log(email.repeat(5));
// doodream@naver.comdoodream@naver.comdoodream@naver.com...
// 문자열 5번 반복붙인 총 문자열 반환