[230403] Number | Math | 부동소수점 | Boolean | 단락회로평가 | nullish 연산자 | 드모르간 법칙

윤지수·2023년 4월 3일
0
post-thumbnail

🪄 Number

숫자형 메소드

  • parseInt()
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 🌟
  • isNaN() : 데이터를 숫자로 변환했을 때 NaN인지 아닌지 확인
// 현재 값이 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
  • toFixed(x) : x만큼의 소수점 이하 자리수를 정확하게 갖는 문자열 표현으로 반환

Math 내장객체

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진수로 바꾸는 방법

  • 앞의 정수부(0)는 그대로 두고 소수부에 1이 나올 때까지 2를 곱한다
  • 1이 나오면 이제 정수부와 합친다

.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

➕ 데이터 단위

  • 1bit = 0과 1을 표현할 수 있는 최소 단위
  • 8bit = 1byte
    00000000 ~ 11111111 (0 ~ 255)
    ex) 0.0.0.0 ~ 255.255.255.255
  • 1024byte = 1KB
  • 1024KB = 1MB
  • 1024MB = 1GB
  • 1024GB = 1TB
  • (KB,MB,GB,TB,PB)갈매기털빼

🪄 할당연산자/단항연산자/증감연산자

🪄 Boolean

💡 "Falsy" 값은 불리언 표현식에서 false로 평가되는 값
"Truthy" 값은 true로 평가되는 값

Falsy

  • false
  • 숫자 0
  • 빈 문자열 ""
  • null
  • undefined
  • NaN

Truthy

  • true
  • 0을 제외한 모든 숫자
  • 빈 문자열을 제외한 모든 문자열
  • 모든 객체: 객체, 배열, 함수 등 모든 객체

🪄 undefined

🪄 null

🪄 단락회로평가

let username = '';
username = username || '무명'
console.log(username);	// 무명

let username2 = '윤말랑';
username2 = username2 || '무명'
console.log(username2);	// 윤말랑

🪄 nullish 연산자

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));

0개의 댓글