1. 숫자(Number)
2. BigInt
3. 문자열(String)
4. Boolean
5. Null, Undefined
6. Symbol
7. 객체(Object)와 배열(Array)
- Set 객체 : 값의 집합
- Map 객체 : 키와 값의 연결
- 형식화 배열 : 바이트 배열과 다른 이진 데이터를 연결
- Date 타입 : 날짜 , 시간 표현
- Error 타입
- 함수
- 클래스
- RegExp 타입: 텍스트 패턴
(문자열에서 정교한 매칭, 검색, 대체 동작을 할 수 있다)
진수 | 표현방법 | 예시 | 10진수 값 |
---|---|---|---|
10진수 | 1, 2, 3 ... 9 | ||
2진수 | 0b(또는 0B) | 0b10101 | 21 |
8진수 | 0o(또는 0O) | 0o377 | 255 |
16진수 | 0x(또는 0X) 0부터 9까지의 숫자나 a(A)부터 f(F)까지 문자 | 0xff | 255 (15 * 16 +15) |
16진수 | 문자는 10부터 15까지를 나타냄 | 0xBADCAFE | 195939070 |
Math 연산자 | 뜻 | Math 연산자 | 뜻 |
---|---|---|---|
Math.pow(num1, num2) | num1의 num2제곱 | Math.round(num) | 반올림 |
Math.ceil(num) | 올림 | Math.floor(num) | 내림 |
Math.abs(num) | 절대값 | Math.max(num1, num2, num3) | 가장 큰 값 |
Math.min(num1, num2, num3) | 가장 작은 값 | Math.random() | 0 ~ 1.0 미만 랜덤 숫자 |
Math.PI | 원주율 | Math.sqrt(num) | 루트num (num의 0.5 제곱근) |
그 외 Math 함수 |
0으로 나누거나, JavaScript에서 표현할 수 있는 값의 초과 (또는 미만)의 값은 Infinity (또는 -Infinity)을 반환한다.
Infinity | 표현하기에 너무 큰 양수
console.log(Number.POSITIVE_INFINITY); //Infinity
console.log(1 / 0); // Infinity
console.log(Number.MAX_VALUE * 2); // Infinity
-Infinity | 표현하기에 절대값이 너무 큰 음수
console.log(Number.NEGATIVE_INFINITY); // -Infinity
console.log(-1 / 0); // -Infinity
console.log(-Number.MAX_VALUE * 2); // -Infinity
console.log(typeof NaN); // number
console.log(Number.NaN); // NaN
console.log(0 / 0); // NaN
console.log(Infinity / Infinity); // NaN
Number.isNaN(num)
num가 NaN인지 확인
num이 NaN이거나, 숫자가 아니면서 숫자로 변환할 수도 없는 값일 때 경우 true
num === NaN
으로 확인할 수 없다. num != num
또는 Number.isNaN(num)
로 확인해야 함let noNum = 0 / 0;
console.log(noNum); //NaN
console.log(noNum === NaN); // false
console.log(Number.isNaN(noNum)); //true
console.log(noNum != noNum); //true
console.log(noNum !== noNum); //true
Number.isFinite(num)
num가 유한한 숫자인지 확인
num이 NaN, Infinity, -Infinity가 아니고, 유한한 숫자(일반적인 숫자)이거나 유한한 숫자로 변환할 수 있으면 true
let num = 100;
console.log(Number.isFinite(num)); // true
let noNum = 0 / 0;
console.log(Number.isFinite(noNum)); // false
10진법을 프로그래밍 언어에서 사용하는 2진법으로 전환시 무한 소수가 발생하며, 반올림 오류가 발생하게 된다. (무한 소수 = 1/3의 소수 표현처럼 끝없이 이어지는 수)
let num1 = 0.3 - 0.2; //0.3 빼기 0.2
let num2 = 0.2 - 0.1; //0.2 빼기 0.1
console.log(x === y); //false
console.log(x === 0.1); //false 0.3 - 0.2는 0.1과 같지 않다
console.log(y === 0.1); //true 0.2 - 0.1 = 0.1
이러한 계산 오류를 보완하기 위해
💡.toFixed() 함수는 문자열(string)로 반환되기 때문에 Number()함수 또는 '+' 연산자를 붙여서 숫자로 형변환시켜주어야 한다.
let sum = 0.1 + 0.2;
console.log(+sum.toFixed(1)); // 0.3
정수 계산은 소수보다 에러가 적다.
하지만 결국 마지막에 나눗셈이 들어가기 때문에 무한소수가 다시 등장할 수 있다는 단점이 있어 주의해야한다.
console.log(Math.round(sum * 10) / 10);
console.log( (0.28 * 100 + 0.14 * 100) / 100); // 0.4200000000000001
JavaScript가 표현할 수 있는 최대 정수 2**53-1 를 넘어가는 수에 대한 계산은 정밀도를 잃는다.
그러나 임의의 정밀도로 정수를 나타낼 수 있는 BigInt(num)
또는 숫자 + n
를 사용하면 계산이 가능하다.
let maxNum = Number.MAX_SAFE_INTEGER; // 9007199254740991
console.log(maxNum + 1); // 9007199254740992
console.log(maxNum + 2); // 9007199254740992 (maxNum+1과 값이 같음)
console.log(maxNum + 1 === maxNum + 2); // true
console.log(BigInt(maxNum) + 2n); // 9007199254740993n
console.log(BigInt(maxNum) + 1n === BigInt(maxNum) + 2n); // false
BigInt은 Number와 별개의 타입이다.
console.log(typeof 1n); // bigint
console.log(1n === 1); // false
console.log(1n == 1); // true
일반적인 산술연산이 가능하다
단, 큰 정수를 표현하기 위한 데이터 타입으로, 소수 표현에는 사용할 수 없다.
따라서 소수 형태 결과가 리턴되는 연산은 소수점 아래 부분은 버려지고 정수 형태로 리턴된다.
console.log (1.5n); // SyntaxError: Invalid or unexpected token
console.log(10n / 6n); // 1n
console.log(5n / 2n); // 2n
number와 BigInt를 함께 산술연산 할 수 없다.
number와 BigInt의 비교 연산은 가능하다
console.log(1000n / 9n); // 111n
console.log(1000n / 9); // TypeError: Cannot mix BigInt and other types, use explicit conversions
let maxNum = Number.MAX_SAFE_INTEGER;
console.log(maxNum + 1 >= BigInt(maxNum) + 2n); // false