강의 출처 : The Complete JavaScript Course 2022 Jonas (Udemy)
console.log(23 === 23.0); //true number is only one data type, is stored in binary form
//Base 10 - 0 to 9
//Binary base 2 - 0 to 1
console.log(0.1 + 0.2); //0.30000000000000004
console.log(0.1 + 0.2 === 0.3); //false
console.log(Number('23'));
console.log(+'23');
parseInt, parseFloat => global functions
Number을 굳이 안붙혀도 되지만, 요즘은 붙혀서 적는 추세!
console.log(Number.parseInt('30px', 10)); //30 주의) 숫자로 시작해야함
console.log(Number.parseInt('30px', 2)); //NaN => binary
console.log(Number.parseInt('e23')); //NaN
console.log(Number.parseInt(' 2.5rem')); //2
//console.log(parseFloat(' 2.5rem')); //2.5 => old way
Check if value is NaN. data type이 NaN인지를 확인한다.
console.log(Number.isNaN(20)); //false
console.log(Number.isNaN('20')); //false (just regular datatype)
console.log(Number.isNaN(+'20X')); //true
console.log(Number.isNaN(23 / 0)); // false datatype : Infinity
Checking if value is number. isNaN보다 더 쉬움. number인지를 확인.
console.log(Number.isFinite(20)); //true
console.log(Number.isFinite('20')); //false
console.log(Number.isFinite(+'20X')); //false
console.log(Number.isFinite(23 / 0)); //false
console.log(Number.isInteger(23)); //true
console.log(Number.isInteger(23.0)); //true
console.log(Number.isInteger(23 / 0)); //false
console.log(Math.sqrt(25)); //5
console.log(25 ** (1 / 2)); //5
console.log(8 ** (1 / 3)); //2
type coercion도 함. but not Parsing
console.log(Math.max(5, 18, 23, 11, 2)); //23
console.log(Math.max(5, 18, '23', 11, 2)); //23
console.log(Math.max(5, 18, '23px', 11, 2)); //NaN doesn't work
console.log(Math.min(5, 18, 23, 11, 2)); //2
console.log(Math.PI * Number.parseFloat('10px') ** 2); // Math.PI 원의 둘레와 지름의 비율. 반지름이 10. 파이 * 반지름의 제곱 = 구의 둘레
//314.1592653589793
console.log(Math.trunc(Math.random() * 6) + 1); // 1 - 6 random number
const randomInt = (min, max) => Math.floor(Math.random() * (max - min) + min);
// 0...1 -> 0...(max-min) -> min... max
console.log(randomInt(10, 20));
type coercion 도 가능
console.log(Math.trunc(23.3)); //23
//반올림
console.log(Math.round(23.3)); //23
console.log(Math.round(23.9)); //24
//올림
console.log(Math.ceil(23.3)); //24
console.log(Math.ceil('23.9')); //24
//내림
console.log(Math.floor(23.3)); //23
console.log(Math.floor(23.9)); //23
console.log(Math.trunc(-23.3)); //23
console.log(Math.floor(-23.3)); //24
trunc는 단순히 소수점 뒤 부분을 다 지움. floor은 무조건 내림 역할. 음수일 때 둘의 차이가 있음.
toFixed => 항상 string return한다.
원리) number은 primitive type이므로 method가 없음. JS에서는 이 숫자를 behind the scene에서 Number Object로 옮김. 그리고 method 호출 작업 후 다시 primitive로 바꾼다.
console.log((2.7).toFixed(0)); //3
console.log((2.7).toFixed(3)); //2.700
console.log((2.345).toFixed(2)); //2.35
console.log(+(2.345).toFixed(2)); //2.35 number data type
console.log(5 % 2); //1
console.log(5 / 2); //5 = 2 * 2 + 1
console.log(8 % 3); //2
console.log(8 / 3); // 8 = 2 * 3 + 2
console.log(6 % 2); //0 even number
const isEven = n => n % 2 === 0;
console.log(isEven(8)); //true
console.log(isEven(23)); //false
labelBalance.addEventListener('click', () => {
[...document.querySelectorAll('.movements__row')].forEach((row, i) => {
if (i % 2 === 0) row.style.backgroundColor = 'orangered';
if (i % 3 === 0) row.style.backgroundColor = 'blue';
});
});
remainder는 every Nth time에 무언가를 해야할 때 사용하면 유용!
Numeric Separator => 숫자의 특정한 원하는 자리에 separator를 놓는다. => 숫자를 읽기 더 쉽게 만든다. but 숫자의 바로앞, 소수점 바로 앞 뒤는 안됌.
// 287,460,000,000
const diameter = 287_460_000_000;
console.log(diameter); //287460000000
const priceCents = 345_99;
console.log(priceCents); //34599
const transferFee1 = 15_00;
const transferFee2 = 1_500;
// 결국 둘다 같은 숫자.
console.log(Number('2300_00')); //NaN
console.log(parseInt('2300_00')); //2300
주의) Numberic Separators는 transferFee 와 같이 '코드 내'에 적을 때만 이용할 것.
console.log(2 ** 53 - 1); //9007199254740991 JS 내에서 표현할 수 있는 가장 큰 숫자
console.log(Number.MAX_SAFE_INTEGER); //9007199254740991
위보다 더 큰 숫자를 하려고 하면 정확도가 떨어진다. unsafe numbers
bigInt 표현하는 두가지 방법
1. 숫자 뒤에 n을 붙힌다.
2. 숫자를 BigInt()로 감싼다.
console.log(2342342342343242342342424234324242342n); // bigInt data type
console.log(BigInt(12313)); //12313n
console.log(10000n + 10000n); //20000n
console.log(234342354365462456426256425624262462n * 1000000000n);
//234342354365462456426256425624262462000000000n
// console.log(Math.sqrt(16n)) => doesn't work
const huge = 13524353425426547654n;
const num = 23;
console.log(huge * num); // error => cannot mix BigInt and Other type!
const huge = 13524353425426547654n;
const num = 23;
console.log(huge * BigInt(num)); // 311060128784810596042n bigInt와 다른 데이터타입 계산시 꼭 bigInt함수를 붙혀줄 것!
console.log(20n > 15); //true
console.log(20n === 20); //false
console.log(typeof 20n); //bigint
console.log(20n == '20'); //true => type coercion
console.log(huge + ' is Really big!!');
소수점 부분을 자동으로 자른다.
console.log(10n / 3n); //3n
console.log(10 / 3); //3.3333333333333335