숫자형 메소드
let n1 = 31;
let n2 = 1001;
console.log(parseInt(n1, 2)); // NaN // 2진법으로 바꾸는 것이 아니라
console.log(parseInt(n2, 2)); // 9 // 2진법으로 된 숫자를 10진법으로 바꾼다
console.log(parseInt(n2, 8)); // 513 // 8진법으로 된 숫자를 10진법으로 바꾼다
console.log(parseInt(n2, 10)); // 1001 // 10진법으로 된 숫자를 10진법으로 바꾼다
💡 Number()
와 parseInt()
console.log(Number(true)); // 1
console.log(Number(false)); // 0
console.log(parseInt(true)); // NaN
console.log(parseInt(false)); // NaN
console.log(Number(' ')); // 0
console.log(Number('')); // 0
console.log(Number('hello')); // NaN
console.log(Number('10 20')); // NaN
console.log(Number('10abc')); // NaN
// 텍스트가 숫자로 시작하지 않을 때 NaN
// 텍스트가 숫자로 시작했을 경우 숫자까지만 변환
console.log(parseInt(' ')); // NaN 🌟
console.log(parseInt('')); // NaN 🌟
console.log(parseInt('hello')); // NaN
console.log(parseInt('hel10lo')); // NaN
console.log(parseInt('10 20')); // 10
console.log(parseInt('10abc')); // 10 🌟
// 현재 값이 NaN이거나 숫자로 변환했을 때 NaN이 되면 true를 반환
console.log(isNaN(undefined)); // true
console.log(isNaN(null)); // false
console.log(isNaN(NaN)); // true
// ES6에서 추가 도입
// 현재 값이 숫자형이고 NaN이면 true를 반환
console.log(Number.isNaN(undefined)); // false
console.log(Number.isNaN(null)); // false
console.log(Number.isNaN(NaN)); // true
Math.abs(-10); // 10 // 절대값
Math.ceil(10.3); // 11 // 올림
Math.floor(10.3); // 10 // 내림
Math.round(10.5); // 11 // 반올림
Math.round(10.3); // 10 // 반올림
Math.sqrt(100); // 10 // square root, 루트
Math.PI // 3.141592653589793
// 보다는 3.14를 사용한다
Math.min(1, 3, 4, 5, 6, 23); // 1
Math.max(1, 3, 4, 5, 6, 23); // 23
Math.random(); // 0 이상 ~ 1 미만
Math.pow(2, 3); // 8 // 2 ** 3
💡 컴퓨터에서 10진수 연산은 정확하지 않다
💡 0.1이 컴퓨터 입장에서 무한수다
소수를 2진수로 바꾸는 방법
.5 * 2 === 1
-> 0.5의 2진수 표현은 0.1
0.1의 2진수 표현은 0.000110011001100110011... : 무한소수화
console.log(0.1 + 0.2); // 0.30000000000000004
console.log(0.1 + 0.1 + 0.1); // 0.30000000000000004
console.log(0.1 * 3); // 0.30000000000000004
console.log(0.3 + 0.6); // 0.8999999999999999
자바스크립트는 값을 확실히 계산할 수 없는 두 수의 합을 십진수로 계산해야하기 때문에 오차가 발생하는 것
Bigint
Number.MAX_SAFE_INTEGER
(2^53 - 1)보다 큰 숫자
제대로 나오게 하려면 n을 붙이거나 Bigint() 안에 써준다
console.log(9007199254740991n + 1n); // 9007199254740992n
console.log(BigInt(9007199254740991) + BigInt(1)); // 9007199254740992n
BigInt 안의 숫자를 2^53 - 1보다 큰 숫자로 하였을 경우 정확한 연산이 안된다. BigInt()를 사용하여 더 큰 숫자를 표현하고 싶을 때에는 문자열로 넣어주어야 한다.
console.log(BigInt(9007199254740993)); // 9007199254740992n
console.log(BigInt("9007199254740993")); // 9007199254740993n
➕ 데이터 단위
💡 "Falsy" 값은 불리언 표현식에서 false로 평가되는 값
"Truthy" 값은 true로 평가되는 값
Falsy
Truthy
let username = '';
username = username || '무명'
console.log(username); // 무명
let username2 = '윤말랑';
username2 = username2 || '무명'
console.log(username2); // 윤말랑
let firstName = null;
let lastName = null;
let nickName = "윤말랑";
console.log(firstName ?? nickName); // 윤말랑
console.log(firstName ?? lastName ?? nickName); // 윤말랑
console.log(firstName ?? lastName ?? nickName ?? "익명 사용자"); // 윤말랑
💡 단락회로평가와 nullish 연산자 차이점
let height = 0;
console.log(height || 100); // 100
console.log(height ?? 100); // 0
let height2;
console.log(height2 || 100); // 100
console.log(height2 ?? 100); // 100
let height3 = "";
console.log(height3 || "hello"); // hello
console.log(height3 ?? "world"); //
드모르간 법칙을 이용해서 무조건 true가 되는 곳이나 무조건 false가 되는 구간을 발견할 수 있다
-> 무조건 false가 되면 코드 전체 삭제, 무조건 true가 되면 if문 제거
const x = 0;
const y = 1;
console.log(!(x || y) === (!x && !y));
console.log(!(x && y) === (!x || !y));