표준 객체 - 원시 자료형

jonyChoiGenius·2023년 1월 4일
0

자료형

자바스크립트는 여덟 개의 자료형이 있다.

  • 숫자형 – 정수, 부동 소수점 숫자 등의 숫자를 나타낼 때 사용합니다. 정수의 한계는 ±253 입니다.
  • bigint – 길이 제약 없이 정수를 나타낼 수 있습니다.
  • 문자형 – 빈 문자열이나 글자들로 이뤄진 문자열을 나타낼 때 사용합니다. 단일 문자를 나타내는 별도의 자료형은 없습니다.
  • 불린형 – true, false를 나타낼 때 사용합니다.
  • null – null 값만을 위한 독립 자료형입니다. null은 알 수 없는 값을 나타냅니다.
  • undefined – undefined 값만을 위한 독립 자료형입니다. undefined는 할당되지 않은 값을 나타냅니다.
  • 객체형 – 복잡한 데이터 구조를 표현할 때 사용합니다.
  • 심볼형 – 객체의 고유 식별자를 만들 때 사용합니다.

이 중 객체형을 제외한 7가지의 자료형을 원시형(primitive data type)이라 한다.

원시값과 메서드

원시형은 가벼워야 한다. 이에 래퍼 객체(String, Number, Boolean, Symbol)로부터 prototype을 상속받아 메서드를 사용한다. 이러한 메서드를 인스턴스 메서드라 한다. 한편 래퍼 객체가 가진 메서드는 정적 메서드, 래퍼 객체가 가진 프로퍼티는 정적 프로퍼티라 한다.

숫자형

생성자

Number()

정적 프로퍼티

  • Number.EPSILON : 1과 1의 다음 숫자의 차이값. 2의 -52승으로, 0.0000000000000002220446049250313(2.220446049250313e-16) 이다. 부동소수점 오차를 해결할 때 사용할 수 있다. Math.abs(a - b) < Number.EPSILON 이면 a와 b는 같은 숫자라 말할 수 있다.
  • Number.MAX_VALUE : Infinity를 제외한 가장 큰 양수.
  • Number.MIN_VALUE : 0을 제외한 숫자 중 가창 작은 양수.
  • Number.MAX_SAFE_INTEGER : 최대 정수. 2^53 - 1. 자바스크립트는 62개의 비트 중 52비트를 가수부로 사용한다.
  • Number.MIN_SAFE_INTEGER : 최소 정수.
  • Number.POSITIVE_INFNITY : Infinity
  • Number.NEGATIVE_INFNITY : -Infinity
  • Number.NaN : Not-a-Number

정적 메서드

  • Number.isFinite() : Number이고 유한한 수라면 true를 반환한다. NaN, Infinity, 문자열은 false를 반환한다. 전역 함수 isFinite()는 문자열을 숫자로 변환을 시도한다는 점과 차이점이다.
  • Number.isInteger(), Number.isSafeInteger() : Number이고 정수라면 true를 반환한다. 문자열을 인수로 넘기면 false를 반환한다.
  • Number.isNaN(): Number이고 NaN이면 true를 반환하고, 문자열을 인수로 넘기면 false를 반환한다. 전역 함수 isNaN()가 문자열을 숫자로 변환을 시도하면서 그 값이 NaN이면 true를, 그 값이 공백이나 빈 문자열이면 false 반환하는 예외가 있는 것과는 차이가 있다.
  • Number.parseFloat(string) : 문자열을 숫자로 바꾼다. 전역 함수 parseFloat()(es2015에서 추가)으로 주로 사용한다. 숫자에 포함되지 않는 문자를 발견하면 파싱을 중단하고 parse된 부분만 반환한다. parseFload("3px") // 3
  • Number.parseInt(string, radix?) : 문자열을 진법radix에 맞는 정수로 바꾸어 준다. 전역함수 parseInt()로 주로 사용한다.

프로토타입 메서드

  • toExponential(실수자리수) : 지수표기법의 문자열로 반환한다. let num = 25.34, num.toExponential(1) //'2.5e+1', num.toExponential() //'2.534e+1'
  • toFixed(소수자릿수) : 고정 소수점 표기법을 가진 문자열을 반환한다. 소수 부동소수점 오류를 해결하는 데에도 도움이 된다. let num = 0.1 + 0. 2 // 0.30000000000000004 num = Number(num.toFixed(2)) // 0.30
  • toPrecision(정밀도) : 표현하는 숫자의 수를 제한하여 문자열로 반환한다. 정밀도가 없으면 toString과 같게 작동한다. let num = 0.0111 + 0.0222 Number(num.toPrecision(1)) // 0.03
  • toLocaleString() : 언어에 맞는 문자열로 바꾸어 준다. let num = 3000, num.toLocaleString() // 3,000 (쉼표가 추가됨)
  • toString(진법) : 숫자를 특정 진법의 문자열로 바꾸어준다.
  • valueOf() : let numObj = new Number(10)과 같이 의도적으로 Number객체를 생성할 수 있다. numObj.valueOf() //10으로 값을 반환할 수 있다.

내장 객체 Math

  • Math.abs(인자)
  • Math.ceil(숫자) : 소수점 올림
  • Math.floor(숫자) : 소수점 버림
  • Math.round(숫자) : 반올림
  • Math.max([배열]), Math.min([배열])
  • Math.pow(숫자, 지수) : x의 y제곱
  • Math.sqrt(숫자) : 숫자의 제곱근
  • Math.random() : 0~1사이의 난수
  • Math.trunc(숫자) : 소수부를 자름. ceil, floor와 달리 소수부를 자른다는 점에서 차이.

그 밖에 로그, 삼각함수 등

문자열

문자열은 ""혹은 ''로 감싸 표현한다.
백틱`을 이용하여 감싸는 경우 '템플릿 리터럴'이라 부르며, 문자열로 변환된다.

정적 프로퍼티

  • String.length() : 문자열의 길이를 반환합니다.

인스턴스 메서드

  • at() : 상대적인 위치를 반환한다. 마지막 인덱스에 접근하는 다음 예제를 비교해보자. let str = 'Hello World!', ,str[str.length - 1] //'!', str.at(-1). 이와 같이 뒤에서 접근할 때에는 .at 메서드가 편리하다.
  • concat(문자열 1, 문자열 2...) : 인수로 넘겨받은 문자열 배열들을 모두 합친 새로운 문자열을 반환한다.
  • endsWtih(타겟문자열, 문자열길이?) : 문자열이 특정 문자열로 끝나는지를 판별한다. let str = 'abc de' str.endsWith(d, 5) //true
  • startsWith(타겟문자열, 시작할 인덱스?) : 문자열이 특정 문자열로 시작하는지를 판별한다.
  • includes(타겟문자열, 시작할 인덱스?) : 문자열이 특정 문자열을 포함하는지를 판별한다. 시작 인덱스를 정할 수 있다.
  • indexOf(타겟문자, 시작할 인덱스?) : 특정 문자의 첫번째 인덱스를 반환하며, 없는 경우 -1을 반환한다.
  • lastIndexOf(searchValue[, fromIndex]) : 특정 문자의 마지막 인덱스를 반환. 없는 경우 -1을 반환.
  • localeCompare(타겟문자, 지역?, 설정?) : 특정 문자열이 타겟 문자열보다 큰지(사전에서 뒤에 위치하는지) 여부를 반환. 'a'.localeCompare('b') // -1, items.sort( (a, b) => a.localeCompare(b, 'fr', {ignorePunctuation: true}));
  • match(정규표현식) : 문자열에서 정규표현식을 충족하는 문자들을 배열로 반환한다. 없는 경우 빈 배열을 반환한다. let test = 'ABC is UpperCase of "Abc" or "abc"';, console.log(test.match(/[A-C]/g)); //['A', 'B', 'C', 'C', 'A']
  • search(정규표현식): 문자열에서 정규표현식을 충족하는 첫번째 문자를 반환한다. 없는 경우 -1을 반환한다.
  • replace(regexp|substr, newSubstr|function) : 특정 패턴을 가장 앞 하나 새로운 패턴으로 바꾸어서 새로운 문자열을 반환합니다.
  • replaceAll(regexp|substr, newSubstr|function) : 특정 패턴을 모두 새로운 패턴으로 바꾸어서 새로운 문자열을 반환합니다.
  • slice(beginIndex[, endIndex]) : 시작 인덱스부터 endIndex 직전까지 추출한다. 음수인 경우 'length - 인덱스'로 취급한다.
  • substring(indexStart[, indexEnd]) : 슬라이싱된 문자열을 새로운 문자열로 반환한다.
  • split(separator, limit) : separator를 기준으로 limit개까지 나눈다. 비어있는 경우 ''가 인수로 넘어간 것과 마찬가지로 문자별로 나눈다.
  • toLocaleLowerCase(), toLocaleUpperCase(), toLowerCase(), toUpperCase()
  • toString(), valueOf() : new String('문자열')을 이용해 의도적으로 문자열 객체를 만들 수 있다. toString이나 valueOf 메서드를 이용해 문자열 객체를 문자열로 반환할 수 있다. const stringObj = new String('foo');, console.log(stringObj.toString()) // 'foo'
  • trim(), trimEnd(), trimStart() : 문자열 끝의 공백 문자를 제거한다.

RegExp

RegExp()로 새로운 정규표현식 객체를 만들 수 있다.
/패턴/플래그의 조합, /^abc/gi으로 구성된다.
const regexp1 = new RegExp(/^abc/i); // ES6
const regexp2 = new RegExp(/^abc/, 'i');

문자 클래스

https://ko.javascript.info/regexp-character-classes
\d : 0~9사이의 문자
\s : 공백. 스페이스, \t, \n, \v, \f, \r
\w : \a-z\, \A-Z\, _ 포함

\D: 숫자가 아닌 문자
\S: 공백이 아닌 문자
\W: 비 라틴 문자나 공백 문자 등 특수문자

패턴

위치

^패턴 : 해당 패턴으로 시작할때 매치
패턴$ : 해당 패턴으로 끝날 때 매치
\특수문자 : 이스케이프. \ 뒤의 특수 문자를 정규표현식이 아닌 일반 문자로 인식
. : 모든 문자
[문자들] : 대괄호가 문자 하나를 의미. 예를 들어, [A-C][0-3][g-i]는 A0g, A0h, B1i, C3g 등의 문자열과 일치합니다.
시작문자-끝문자 : 문자의 범위. 가령 [A-C]는 A부터 C
^ : 부정을 의미. [^A-C]는 A부터 Z를 제외한 모든 문자.
(서브1|서브2) : 소괄호 안에는 파이프로 분리한 문자들을 넣을 수 있음.

수량자

* : 별표 앞 문자가 패턴에 없을 수도 있고 여러개 있을 수도 있음. 가령 a*baaab, abb와도 일치함.
+ : 플러스 앞 문자가 패턴에 하나 이상 있음. 가령 a+baaab, ab와는 일치하지만 b와는 일치하지 않음.
? : 물음표 앞 문자가 패턴에 하나 이하 있음. 가령 a?bb, ab와는 일치하지만 aab와는 일치하지 않음.
{} : 중괄호 안에 있는 숫자의 범위만큼 일치. [a-z]{3,}는 소문자가 3개 이상, [abc]{1,2}는 a 혹은 b 혹은 c가 1개 혹은 2개 연결됨.

*, +, {n, }는 탐욕적 수량자이다. 최대한 많은 문자를 모두 찾아낸다.
탐욕적 수량자?는 게으른 수량자이다. 최소한 적게 일치하는 패턴. 가령 r.*은 r로 시작하는 최대한 긴 문장이지만, r.*?은 r로 시작하는 가장 짧은 문자. 즉 가장 처음만나는 r을 의미한다.

플래그

i : 대소문자 구분 없음
g : 패턴과 일치하는 모든 값을 검색
m : 다중행 모드. 템플릿 리터럴에서 유용함.
s : \n.문자에 포함될 수 있도록.
u : 유니코드
y : sticky

기타 자료형

값 속성

Infinity, NaN, undefined, globalThis - 간단한 값을 반환하며, 속성이나 메서드를 가지고 있지는 않다.

함수 속성

eval() : 사용 금지
isFinite(), isNaN(),
parseFloat(), parseInt(),
encodeURI(), decodeURI() : URI의 문자를 UTF-8로 인코딩 혹은 디코팅

국제화

Intl : Intl.DateTimeFormat 등 각 언어에 맞는 날짜, 시간, 복수 및 단수 구분 등

profile
천재가 되어버린 박제를 아시오?

0개의 댓글