20210713 JavaSciprt DeepDive 11 : Number, Math, Date, RegExp, String (생성자 함수, 프로퍼티, 메서드 등…)
JavaScript Deep Dive 11
📄 용어 및 중요사항 정리
Number
Number 생성자 함수
new Number(인수): [[NumberData]] 내부 슬롯에 숫자인 인수를 할당한 Number 래퍼 객체 생성- 숫자 인수 없이 호출시, 기본으로 내부 슬롯에는 0을 할당
 - [[PrimitiveValue]]와 [[NumberData]]는 같음
 - 인수가 숫자가 아닌 값 전달시, 숫자로 강제 변환후 내부슬롯에 할당
        
- 문자열 숫자 -> 숫자로 변환되어 할당
 - 문자열 문자 -> NaN으로 변환되어 할당
 
 
Number(인수): 인스턴스가 아닌, 숫자를 반환(명시적 타입변환)- 문자열 숫자 -> 숫자
 - 불리언 -> 숫자
 
Number 프로퍼티
- 
    
Number.EPSILON: 1과 1보다 큰 숫자 중에서 가장 작은 숫자와의 차이와 같음 (2.2204460…… * 10^-16)- 부동소수점 산술 연산에서의 미세한 오차 발생을 해결하기 위해 사용함
        
- 부동소수점의 연산값과 기대값이 다름
 0.1 + 0.2 === 0.3은 false임- 부동소수점의 연산값과 기대값의 차이가 EPSILON보다 작으면 같은 수로 인정함
            
- EPSILON을 통한 비교함수를 만들수 있음
 
 
 
 - 부동소수점 산술 연산에서의 미세한 오차 발생을 해결하기 위해 사용함
        
 
Number.MAX_VALUE: JS에서 표현할수 있는 가장 큰 양수 값- MAX_VALUE < Infinity
 
Number.MIN_VALUE: JS에서 표현할수 있는 가장 작은 양수 값- 5*10^-324
 - MIN_VALUE > 0
 
Number.MAX_SAFE_INTEGER: JS에서 안전하게 표현할수 있는 가장 큰 정수값 (9007199254740991)Number.MIN_SAFE_INTEGER: JS에서 안전하게 표현할수 있는 가장 작은 정수값 (-9007199254740991)
Number.POSITIVE_INFINITY: 양의 무한대를 나타내는 숫자값 Infinity 값과 같음Number.NEGATIVE_INFINITY: 음의 무한대를 나타내는 숫자값 -Infinity 값과 같음Number.NaN: 숫자가 아님을 나타내는 숫자값으로 window.NaN과 같음
Number 메서드
정적 메서드
- Number의 정적 메서드는 검사를 실행하는 메서드이며, 모두 true, false를 반환함
 
Number.isFinite(인수): 인수로 전달된 숫자값이 정상적인 유한수인지 검사 (Infinity, -Infinity가 아닌지 검사)return: true , false- NaN은 항상 false
 - 암묵적 타입 변환이 없음 -> 숫자가 아닌 인수는 언제나 false
        
window.isFinite는 암묵적 타입 변환 있음
 
Number.isInteger(인수): 인수로 전달된 숫자값이 정수인지 검사return: true, false- 암묵적 타입 변환 없음
 
Number.isNaN(인수): 인수로 전달된 숫자값이 NaN인지 검사return: true, false- 숫자가 아닌 인수는 언제나 false
 - 암묵적 타입 변환 없음
        
window.isNaN는 암묵적 타입 변환 있음
 
Number.isSafeInteger(인수): 인수로 전달된 숫자값이 안전한 정수인지 검사return: true, false- 안전한 정수값 : -(2^53-1) ~ 2^53-1 사이의 정수값
 - 암묵적 타입 변환 없음
 
프로토타입 메서드
- 숫자 리터럴과 함께 프로토타입 메서드를 사용할 경우 에러 발생함
 - Number의 프로토타입 메서드의 경우 모두 문자열을 반환함
 
Number.prototype.toExponential(인수): 숫자를 지수 표기법으로 변환하여 문자열로 반환- 인수 : 지수 표기법에서 소수점 이하로 표현할 자릿수 (기본값 4자리)
 return: 지수 표기법의 문자열- 지수 표기법 : 매우 크거나, 작은 숫자 표기시 사용
        
- e 앞에 있는 숫자에 10의 n승을 곱하는 형식으로 수를 나타내는 방식
            
- +기호 뒤에 숫자가 몇 승인지를 표시함
 - 예) 77.1234 = 7.71234e+1)
 
 
 - e 앞에 있는 숫자에 10의 n승을 곱하는 형식으로 수를 나타내는 방식
            
 - 숫자 리터럴인 경우 괄호를 사용하여 묶어 메소드 사용할 것을 추천
 
Number.prototype.toFixed(인수): 숫자를 반올림하여 문자열로 반환- 인수 : 반올림한 결과로 표현할 소수점 이하 자리수 (기본값 0)
 return: 반올림한 문자열
Number.prototype.toPrecision(인수): 인수로 전달받은 전체 자릿수 까지 유효하도록 나머지 자릿수를 반올림하여 문자열로 반환- 인수 : 표현할 전체 숫자 자리수 (0 ~21 정수), 기본값 0
 - 인수로 받은 자리수로 정수 부분을 표현하기 힘든 경우 지수 표기법을 사용함
 return: 반올림한 문자열 반환
Number.prototype.toString(인수): 숫자를 문자열로 변환하여 반환- 인수 : 변환할 진법 (2~36 정수), 기본 10진법
 
Math
- 수학적인 상수와 함수를 위한 프로퍼티와 메서드 제공 (생성자 함수가 아님)
 
Math 프로퍼티
Math.PI: 원주율 PI 파이 값을 반환
Math 정적 메서드
- 
    
Math.abs(인수): 인수로 전달된 숫자의 절대값 반환 (0 또는 양수)- 인수는 암묵적 변환 있음
        
- 인수 생략시 NaN 반환
 
 - 문자열 숫자 -> 숫자
 - truthy, falsy
        
- ’’, [], null -> 0
 - undefined, {}, ‘string’ -> NaN
 
 
 - 인수는 암묵적 변환 있음
        
 - 
    
Math.round(인수): 인수로 전달된 숫자의 소수점 이하를 반올림한 정수 반환- 인수 생략시, NaN 반환
 
 Math.ceil(인수): 인수로 전달된 숫자의 소수점 이하를 올림한 정수 반환- 인수 생략시, NaN 반환
 
- 
    
Math.floor(인수): 인수로 전달된 숫자의 소수점 이하를 내림한 정수 반환- 인수 생략시, NaN 반환
 
 - 
    
Math.sqrt(인수): 인수로 전달된 숫자의 제곱근을 반환- 음수 제곱근은 없으므로, NaN 반환
 - 인수 생략시, NaN 반환
 
 Math.random(): 임의의 난수(0 ~ 1 미만 실수)를 반환- 주의) 0포함, 1 불포함
 
Math.random() * 10; // 0 ~ 10 미만 실수
Math.random() * 10 + 1; // 1 ~ 10.999999 실수
Math.floor(Math.random() * 10 + 1); // 1 ~ 10 포함 정수
- 
    
Math.pow(base, exponent): 첫번째 인수를 밑, 두번째 인수를 지수로 거듭 제곱한 결과 반환- base: 밑
 - exponent: 지수
 - 지수 연산자 사용이 더 깔끔함 (**)
 
 - 
    
Math.max(인수들): 전달 받은 인수들 중에서 가장 큰 수를 반환함- 인수 생략시, -Infinity 반환
 - 배열을 인수로 전달받아 최대값 구하기
        
Math.max.apply(null, 배열): apply 사용Math.max(...배열): 스프레드 문법 사용
 
 - 
    
Math.min(인수들): 전달 받은 인수들 중에서 가장 작은 수를 반환함- 인수 생략시, Infinity 반환
 - 배열을 인수로 전달받아 최소값 구하기
        
Math.min.apply(null, 배열): apply 사용Math.min(...배열): 스프레드 문법 사용
 
 
Date
- Date는 빌트인 객체면서 생성자 함수임
 UTC(협정 세계시): 국제 표준시 (기술 표기에서 사용)GMT(그리니치 평균시): UTC와 비슷하지만 초의 소수점 단위에서만 차이가 남
KST(한국 표준시): UTC + 9시간- 현재 날자 시간은 JS 코드가 실행된 시스템 시계에 의해 결정됨
 
Date 생성자 함수
Date(): Date객체를 반환하지 않고 날짜, 시간 정보 문자열 반환
Date 객체: Date 생성자 함수로 생성한 객체로 내부적으로 날짜,시간을 나타내는 정수값을 갖음- 1970.01.01 00:00:00 ~ 현재 날짜 시간 까지의 밀리초를 나타냄
 - 하루 : 정수값 86,400,000 크기 (24h _ 60m _ 60s * 1000ms)
 - 현재 날짜가 아닌 특정 날짜의 경우 생성자 함수에 정보를 인수로 넣어 지정 가능함
 
- 
    
new Date(): 현재 날짜와 시간을 가지는 Date 객체 반환, 객체를 콘솔에 찍으면 기본적인 정보가 뜸- 
        
new Date(ms): 숫자 타입의 밀리초를 인수로 전달시, 시작 기점에서 밀리초 만큼 경과한 날짜, 시간을 나타내는 객체 반환 - 
        
new Date(dateString): 날짜와 시간을 나타내는 문자열을 인수로 전달시, 해당 날짜의 객체 반환- 단, dataString은 Date.parse 메서드로 해석 가능한 형식이여야 함
 - ‘May 26, 2020 10:00:00’, ‘2020/03/26/10:00:00’
 - 슬래시(/), 콜론(:) 표기법이 가독성이 좋음 (
2020/03/26/10:00:00) 
 - 
        
new Date(year,month[,day,hour,minute,second,ms]): 연, 월, 일, 시, 분, 초, 밀리초를 의미하는 숫자를 인수로 전달시, 해당 날짜의 객체 반환 (, 표기법)- 연, 월은 필수(생략시, 기준점 객체 반환) (지정하지 않은 옵션은 0 or 1로 초기화됨)
 - year : 1900 이후의 정수/ 0~99는 1900년대로 인식
 - month: 0 ~ 11 (0이 1월임)
 - day: 1~31, hour: 0~23, minute: 0~59, second: 0~59, ms: 0~999 인 정수
 
 
 - 
        
 
Date 정적 메서드
Date.now(): 현재시간 까지 경과한 밀리초를 숫자로 반환Date.parse(인수): 인수로 전달된 dataString 형식의 날짜까지의 밀리초를 숫자로 반환Date.UTC(인수): 인수(, 콤마 표기법)로 전달된 시간까지의 밀리초를 숫자로 반환- KST가 아닌 UTC로 인식됨
 
Date 프로토타입 메서드
Date.prototype.getFullYear(): Date 객체의 연도를 나타내는 정수 반환Date.prototype.setFullYear(y): 전달 받은 인수를 Date 객체의 연도를 나타내는 정수를 설정함- 옵션으로 ‘월’, ‘일’ 까지도 지정 가능
 
Date.prototype.getMonth(): Date 객체의 월을 나타내는 정수 반환 (0 ~ 11)Date.prototype.setMonth(M): 전달 받은 인수를 Date 객체의 월을 나타내는 정수로 설정 (0 ~ 11)- 옵션으로 ‘일’ 지정 가능
 
Date.prototype.getDate(): Date 객체의 ‘날(일)’을 나타내는 정수를 반환 (1 ~ 31)Date.prototype.setDate(d): 전달 받은 인수를 Date 객체의 날을 나타내는 정수로 설정 (1 ~ 31)
Date.prototype.getDay(): Date 객체의 ‘요일’을 나타내는 정수를 반환 (0(일요일) ~ 6)
Date.prototype.getHours(): Date 객체의 ‘시간’을 나타내는 정수를 반환 (0 ~ 23)Date.prototype.setHours(h): 전달 받은 인수를 Date 객체의 ‘시간’을 나타내는 정수로 설정 (0 ~ 23)- 옵션으로 분, 초, 밀리초 지정 가능
 
Date.prototype.getMinutes(): Date 객체의 ‘분’을 나타내는 정수를 반환 (0 ~ 59)Date.prototype.setMinutes(m): 전달 받은 인수를 Date 객체의 ‘분’을 나타내는 정수로 설정 (0 ~ 59)- 옵션으로 초, 밀리초 지정 가능
 
Date.prototype.getSeconds(): Date 객체의 ‘초’을 나타내는 정수를 반환 (0 ~ 59)Date.prototype.setSeconds(s): 전달 받은 인수를 Date 객체의 ‘초’을 나타내는 정수로 설정 (0 ~ 59)- 옵션으로 밀리초 지정 가능
 
Date.prototype.getMilliseconds(): Date 객체의 ‘밀리초’을 나타내는 정수를 반환 (0 ~ 999)Date.prototype.setMilliseconds(ms): 전달 받은 인수를 Date 객체의 ‘밀리초’을 나타내는 정수로 설정 (0 ~ 999)
Date.prototype.getTime(): 객체의 시간까지 경과된 밀리초를 반환Date.prototype.setTime(인수): 전달 받은 인수를 객체의 시간까지 경과된 밀리초를 설정
Date.prototype.getTimezoneOffset(): UTC와 Date객체의 로케일(locale) 시간과 차이를 분단위로 반환
Date.prototype.toDateString(): 사람이 읽을 수 있는 형식의 문자열로 Date 객체의 날짜를 반환- 날짜 까지임 시간은 제외
 
Date.prototype.toTimeString(): 사람이 읽을 수 있는 형식의 문자열로 Date 객체의 시간을 반환- 날짜 제외 시간만 반환
 
Date.prototype.toISOString(): ISO 8601 형식으로 날짜, 시간 모두 표현한 문자열 반환- 2020-07-24t03:30:00.000Z
 
Date.prototype.toLocaleString(locale): 인수로 전달한 로케일을 기준으로, Date객체의 날짜 시간을 표현한 문자열로 반환- 인수 생략시, 브라우저가 동작 중인 시스템의 로캘 적용
 - ‘ko-KR’, ‘en-US’, ‘ja-JP’
 
Date.prototype.toLocaleTimeString(locale): 인수로 전달한 로케일을 기준으로 객체의 시간을 표현한 문자열로 반환
RegExp (정규 표현식)
정규 표현식
- 일정한 패턴을 가진 문자열의 집합을 표현하기 위해 사용하는 형식언어(formal language)
 - 패턴 매칭 기능 : 특정 패턴과 일치하는 문자열 검색, 추출, 치환 기능
 - 반복문, 조건문 없이 패턴으로 간단하게 테스트 하게 해줌
 
정규 표현식 생성
정규 표현식 리터럴:/Pattern/Flags
RegExp 생성자 함수new RegExp(pattern, [, flags])
RegExp를 사용하는 메서드
- 
    
RegExp.prototype.exec(stringTarget): 인수로 전달받은 문자열에 대해 정규 표현식의 패턴을 검색하여 매칭 결과를 배열로 반환 (결과가 없으면 null 반환)- g플래그를 달아도, 첫번째 매칭 결과만 반환
 ["is", index: 5, input: "Is this all there is?", group: undefined]
 - 
    
RegExp.prototype.test(stringTarget): 인수로 전달받은 문자열에 대해 정규 표현식의 패턴을 검색하여 매칭 결과를 불리언으로 반환 - 
    
String.prototype.match(RegExp): 인수로 전달받은 정규표현식과 대상 문자열의 매칭 결과를 배열로 반환- 그룹 연산자 있으면, 해당 그룹의 하위 요소 매칭 결과도 배열로 넣음
 - g플래그를 달면, 모든 매칭 결과를 배열로 반환함
        
- g플래그 X -> 
["is", index: 5, input: "Is this all there is?", group: undefined] - g플래그 O -> 
["is", "is"] 
 - g플래그 X -> 
 
 
플래그
- 검색 방식 설정
    
- 기본값 : 대소문자 구별, 첫번째 매칭한 대상만 검색
 i(ignore case) : 대소문자 구별하지 않고 패턴 검색g(global) : 패턴과 일치하는 모든 문자열 전역 검색m(multi line) : 문자열의 행이 바뀌더라도 패턴 검색을 계속함
 
패턴
- 메타문자(meta character) 기호
 - 매치 (match) : 문자열 내에, 패턴과 일치하는 문자열이 존재하는 것
 
검색
문자열 검색- 정규표현식을 생성후 RegExp 메서드를 활용해야 검색이 수행됨
 
임의 문자열 검색,..: 임의 문자 한개를 의미, 즉 자리수를 나타냄
반복 검색->{}, +, ?A{m,n}: A가 최소 m ~ 최대 n 번 반복되는 문자열 (콤마뒤 공백 없게 주의)A{m}: A가 m번 반복되는 문자열A{m,}: A가 최소 m번 반복되는 문자열
A+: A가 최소 한번 이상 반복되는 문자열A{1,}과 같음A?: A가 있거나 없는 문자열A*: A가 있거나 없거나 많거나
- 
    
OR 검색->| , [], -A|B: A또는 B를 포함한 문자열[AB]: 문자 하나하나 모두 or로 동작A|B와 같음
A+|B+: A한번이상 반복 또는 B한번이상 반복, 단어 레벨 검색[AB]+와 같음[A-Z]:-는 범위 지정이 가능함 알파벳 A에서 Z까지 대문자 범위[a-z]: 알바벳 소문자 범위[0-9]: 숫자 0에서 9 범위
\d: 숫자를 의미 0-9\D: 문자를 의미\w: 알파벳, 숫자, 언더스코어[A-Za-z0-9_]\W: 알파벳, 숫자, 언더스코어가 아닌 문자 (공백, 콤마, $, %, & 등…)\s: 여러가지 공백 문자를 의미 (\t, \r, \n, \v, \f)
 - 
    
NOT 검색->[^]대괄호 안[^A]: A를 제외한 문자[^0-9]:[\D][^A-Za-z0-9_]:[\W]
 
시작 위치로 검색->^[]대괄호 밖- 해당 패턴으로 시작하는지 검색
 ^AB: AB로 시작하는지 검사
마지막 위치로 검색->$- 해당 패턴으로 끝나는지 검색
 AB$: AB로 끝나는지 검사
자주 사용하는 정규 표현식 검사
- 특정 단어로 시작하는지 검사
    
- http:// or https:// -> 
/https?:\/\//,/(http|https):\/\// 
 - http:// or https:// -> 
 
- 특정 단어로 끝나는지 검사
    
- html로 끝나는지 검사 -> 
/html$/ 
 - html로 끝나는지 검사 -> 
 
- 숫자로만 이루어진 문자열인지 검사
    
/^\d+$/(^ 시작, $ 끝)
 
- 하나 이상의 공백으로 시작하는지 검사
    
/^[\s]+/
 
- 아이디로 사용 가능한지 검사
    
- 알파벳 대소문자 또는 숫자로 시작하고 끝나며 4~10자리 -> 
/^[A-Za-z0-9]{4,10}$/ 
 - 알파벳 대소문자 또는 숫자로 시작하고 끝나며 4~10자리 -> 
 
- 메일 주소 형식에 맞는지 검사
    
/^[A-Za-z0-9]([-_\.]?[A-Za-z0-9])*@[A-Za-z0-9]([-_\.]?[A-Za-z0-9])*\.[a-zA-Z]{2,3}$/
 
- 핸드폰 번호 형식에 맞는지 검사
    
/^\d{3}-\d{3,4}-\d{4}$/
 
- 특수 문자 포함 여부 검사
    
/[^A-Za-z0-9]/gi- 특수 문자 제거시 string의 replace 메서드 사용
        
target.replace(/[^A-Za-z0-9]/gi, '')
 
 
String
String 생성자 함수
new String(인수): new 키워드와 호출시 [[StringData]] 내부 슬롯에 인수로 전달받은 문자열을 할당한 String 래퍼 객체를 생성함- 인수를 전달하지 안하면 -> 빈 문자열을 할당함
 - 문자열이 아닌 값을 인수로 전달시 -> 문자열로 강제 변환한 값을 할당함
 String {length: 0, [[PrimitiveValue]]}- [[StringData]] = [[PrimitiveValue]]
 
String 래퍼 객체:- length 프로퍼티와 인덱스를 나타내는 숫자 형식의 문자열을 프로퍼티 키로, 각 문자를 프로퍼티 값으로 갖는 유사 배열객체이면서, 이터러블 임
        
- -> 인덱스를 사용해서 각 문자에 접근 가능
 
 - 문자열은 원시 값이므로 변경할 수 없음 -> 동적으로 값 할당 불가
        
- 할당하려고 하면 error는 발생하지 않지만, 변경되진 않음
 - 변경 불가능한 값이기 때문에, 읽기 전용 객체로 제공됨
 - writable 프로퍼티 어트리뷰트 값이 false
 
 
- length 프로퍼티와 인덱스를 나타내는 숫자 형식의 문자열을 프로퍼티 키로, 각 문자를 프로퍼티 값으로 갖는 유사 배열객체이면서, 이터러블 임
        
 
String(인수): new 연산자 없이 호출하는 경우, 인수를 문자열로 변환해서 반환- String()을 통해 명시적으로 타입을 변환하기도 함
 
length 프로퍼티: 문자열의 문자 개수 반환
String 메서드
- 
    
String 래퍼 객체는 읽기 전용 객체 임
- -> String 메서드 중에 원본을 직접 변경하는 메서드는 없음
 - -> 언제나 새로운 문자열을 반환함(읽기 전용)
 
 
String.prototype.indexOf(searchValue, searchStartIndex)- 인수로 전달받은 문자열(searchValue)을 검색하여 첫 번째 인덱스 반환, 검색 실패시 -1 반환
 - 두번 째 인수(searchStartIndex)로 검색 시작 인덱스 설정 가능
 - 대상 문자열에 특정 문자열 존재 확인시 유용
 String.prototype.includes사용시 가독성이 좋음
String.prototype.search(RegExp)- 인수로 전달받은 정규 표현식과 매치하는 문자열을 검색하여 일치하는 문자열의 인덱스 반환
 - 검색 실패시 -1 반환
 
String.prototype.includes(searchValue, searchStartIndex)- 전달 받은 인수(searchValue) 문자열이 래퍼객체에 포함되어 있는지 확인하여 true or false를 반환
 
String.prototype.startsWith(searchValue, searchStartIndex)- 대상 문자열이 인수로 전달받은 문자열로 시작하는지 확인하여 그 결과를 true, false로 반환
 
String.prototype.endsWith(searchValue, searchStartIndex)- 대상 문자열이 인수로 전달받은 문자열로 끝나는지 확인하여 그 결과를 true, false로 반환
 
String.prototype.charAt(index)- 대상 문자열에서 인수로 전달받은 인덱스에 위치한 문자를 검색하여 반환
 - 인덱스가 문자열의 범위를 벗어난 정수 -> 빈 문자열 반환
 String.prototype.charCodeAt(),String.prototype.codePointAt()이 비슷한 역할을 함
String.prototype.substring(startIndex, endIndex)- startIndex 부터 endIndex 이전 까지의 부분 문자열을 반환
 - endIndex 생략시, startIndex부터 문자열 끝까지 반환
        
- startIndex > endIndex -> 교차되어 해당 범위의 문자열 반환
 - 인수가 음수 또는 NaN인 경우 -> 0으로 인식하여 계산
 - 인수 > 문자열 길이 -> 해당 인덱스를 기준으로 계산
 
 - 인수가 서로 유연하게 작용함
 - indexOf와 사용시 특정 문자열 기준으로 주위의 문자열을 취득할 수 있음
 
String.prototype.slice(startIndex, endIndex)- startIndex ~ endIndex 전 까지의 부분 문자열 반환
 - substring과 똑같이 동작하지만, 인수가 음수 인덱싱을 지원함
 
String.prototype.toUpperCase()- 대상(래퍼) 문자열를 모두 대문자로 변경한 문자열을 반환
 
String.prototype.toLowerCase()- 대상(래퍼) 문자열를 모두 소문자로 변경한 문자열을 반환
 
String.prototype.trim()- 대상 문자열 앞뒤에 공백 문자를 제거한 문자열 반환
 String.prototype.trimStart(),String.prototype.trimEnd()-> 앞 뒤 선택적으로 공백 제거 가능String.prototype.replace(/\s/g, '')를 활용해서 공백 제거 가능
String.prototype.repeat(count)- 대상 문자열을 전달받은 인수(count) 정수만큼 반복해 연결한 새로운 문자열을 반환
 - count = 0 -> 빈 문자열 반환
 - count < 0 -> RangeError 발생
 - count 생략시 기본값 0
 
String.prototype.replace((String||RegExp), (StringValue||Callback))- 변경할 문자(string or RegExp)를 찾아 특정 문자(stringValue)로 치환한 문자열을 반환
        
- 첫번째 인수 : 문자열 또는 정규표현식을 받아, 변경할 문자를 찾음
            
- 문자열을 넣어 검색된 문자열이 다수인 경우, 첫번째로 발견한 문자가 기준이 됨
 - 정규표현식을 넣어 검색된 문자열이 다수인 경우, 모두 기준이 되어 치환됨
 
 - 두번째 인수 :
            
- 두번째 인수가 문자열인 경우 첫번째 인수를 통해찾은 문자를 치환할 문자
 - 두번째 인수가 치환 함수인 경우, 첫번째 인수를 통해 찾은 결과를 치환함수에 전달하여 호출하여 반환된 결과와 매치결과를 치환함
 
 
 - 첫번째 인수 : 문자열 또는 정규표현식을 받아, 변경할 문자를 찾음
            
 
- 변경할 문자(string or RegExp)를 찾아 특정 문자(stringValue)로 치환한 문자열을 반환
        
 
function camelToSnake(camelCase) {
  return camelCase.replace(/.[A-Z]/, (match) => {
    console.log(match); // 소문자 대문자 만나는 2개의 문자열
    return match[0] + "_" + match[1].toLowerCase();
  });
}
String.prototype.split((String||RegExp), ArrayLength)- 대상 문자열에서 전달된 인수(String, RegExp)에 맞는 문자열을 구분자로 하여 분리하여 하나의 배열로 반환
 - 두번째 인수로 변환된 배열의 길이를 지정할 수 있음
 Array.prototype.reverse,Array.prototype.join을 사용하면 문자열을 뒤집을 수 있음
| 표기 | 내용 | 
|---|---|
indexOf(searchValue, searchStartIndex) | 
      검색하여 첫 번째 인덱스 반환 | 
search(RegExp) | 
      정규 표현식과 매치하는 문자열을 검색하여 일치하는 문자열의 인덱스 반환 | 
includes(searchValue, searchStartIndex) | 
      문자열이 래퍼객체에 포함되어 있는지 확인하여 true or false를 반환 | 
startsWith(searchValue, searchStartIndex) | 
      전달받은 문자열로 시작하는지 확인하여 그 결과를 true, false로 반환 | 
endsWith(searchValue, searchStartIndex) | 
      전달받은 문자열로 끝나는지 확인하여 그 결과를 true, false로 반환 | 
charAt(index) | 
      전달받은 인덱스에 위치한 문자를 검색하여 반환 | 
substring(startIndex, endIndex) | 
      startIndex 부터 endIndex 이전 까지의 부분 문자열을 반환 | 
slice(startIndex, endIndex) | 
      startIndex ~ endIndex 전 까지의 부분 문자열 반환(음수 지원) | 
toUpperCase() | 
      문자열를 모두 대문자로 변경한 문자열을 반환 | 
toLowerCase() | 
      문자열를 모두 소문자로 변경한 문자열을 반환 | 
trim() | 
      문자열 앞뒤에 공백 문자를 제거한 문자열 반환 | 
repeat(count) | 
      인수(count) 정수만큼 반복해 연결한 새로운 문자열을 반환 | 
replace((String \|\| RegExp), (StringValue \|\| Callback)) | 
      변경할 문자(string or RegExp)를 찾아 특정 문자(stringValue, callback)로 치환한 문자열을 반환 | 
split((String \|\| RegExp), ArrayLength) | 
      전달된 인수(String, RegExp)에 맞는 문자열을 구분자로 하여 분리하여 하나의 배열로 반환 |