숫자
숫자 리터럴
35;
3.141;
0xff; 255
5e2; 500
숫자 리터럴 표현식들
const num = 123.111;
num.toFixed; '123'
new Number(123);
Number(undefined); NaN
Number(null); 0
Number(''); 0
Number('String'); NaN
Number(true); 1
Number(false); 0
Number(3.141592); 3.141592
숫자로 변환시 나타내는 값들을 알 수 있다.
if (1 == true) {
console.log('참');
}
느슨한 검사(eqeq)를 통하여 참인지 알 수 있는 방법도 있지만 추천하지 않는다.
console.log(+true); 1
console.log(+false); 0
이런식으로 표현 가능하지만 추천하지는 않는다.
const strNumber = '11111';
if (Number(strNumber)) {
console.log('실행'); 실행
}
위와 같이 Number() 을 사용해서 명시적으로 변환하는 것을 추천한다.
Not a Number
Number(undefined); NaN
parseInt('숫자로 변환 불가능한 문자열'); NaN
Math.log(-1); NaN
10 + NaN; NaN
'가나다라' / 10; NaN
parseInt() 정수로 변환하는 메소드
논리적으로 숫자가 될 수 없는 것들은 NaN으로 표기된다.
문자열과 숫자열의 연산은 + 만 가능하다.
Infinity
isFinite(Math.pow(2, 1024)); Infinity
7 / 0; Infinity
isFinite(Infinity); false
isFinite(NaN); false
isFinite(19); true
isFinite() 를 사용하여 infinity인지 구분가능하다.
정상적인 숫자일 경우 true, infinity일 경우 false를 반환
Bigint
안정적인 범위의 정수
BigInt는 원시 값이 안정적으로 나타낼 수 있는 최대치인 2^53 - 1보다 큰 정수를 표현할 수 있는 내장 객체이다.
Number.Max_VALUE 자바스크립트가 표현할 수 있는 가장 큰 양싀 숫자 값
BigInt는 internet Explorer에서 동작하지 않는다.
console.log(123123123123123123123123123123123n);
console.log(
BigInt(123123123123123123123123123123123),
);
Bigint를 사용하면 굉장히 큰 숫자도 호환해서 사용가능하다.
위와 같이 뒤에 n을 쓰거나 BigInt() 안에 숫자를 넣어준다ㅇㄴㅁㅇ
정수
- 자바스크립트에는 부동소수점(IEEE-754) 숫자만 존재
- 정수를 저장하는 2가지 방법
1. 10진 소수가 없는 작은 숫자는 정수로 오래 유지 (예. 31비트)
2. 비트 연산자를 이용 32비트 정수로 바꿔 반환
// 안전한 정수의 최대 값
Number.MAX_SAFE_INTEGER; 9007199254740991
// 안전한 정수의 최소 값
Number.MIN_SAFE_INTEGER; -9007199254740991
Math.floor(4); 4
Math.ceil(4.9); 5
Math.round(4.6); 5
floor 가장 가까운 정수로 내림
ceil 가장 가까운 정수로 올림
round 가장 가까운 정수로 반올림
parseInt(undefined, '필수');
parseInt('10', '필수');
Number('10');
parseInt() 함수는 문자열 인자를 파싱하여 특정 진수(수의 진법 체계에서 기준이 되는 값)의 정수를 반환한다.
function parseInt2(value, radix) {
if (radix === undefined) {
return Number(value);
}
return; // some code
}
radix는 선택적인 매개변수이기 때문에 10진수가 아닐 수 있다.
parseInt(value, radix) 를 사용할때에는 두번째 인자에 몇 진수인지 꼭 넘겨줘야한다.
산술연산자
1 + 1; 2
2 - 1; 1
10 / 5; 2
10 % 2; 0
2 * 2; 4
+ - / * %
let x = 5;
++x; 6
--x; 5
let y = 5;
y++; 5
y; 6
y--; 6
y; 5
++x; 사용시 x값이 +1이 되며 더한 값을 반환하고
x++; 사용시 +1의 값이 +1 되지만 값은 본래 값을 반환한다
console.log(3 + (10 * 2));
console.log((3 + 10) * 2);
const isTicketPrice = 3 + 10
if (3 + (10 * 2)) {
}
if (isTicketPrice * 2) {
}
산술 연산자는 우선순위가 있으므로 괄호를 사용하여 자신과 동료가 알기 편하게 해야한다.
Not a Number 판별
* 숫자로 읽어낼 수 없다.
* 잘못된 계산 결과식
* 정의할 수 없는 결과식
* 문자열이 포함된 계산식 (덧셈 제외)
// 느슨하게 검사
isNaN(undefined); true
isNaN({}); true
isNaN('문자열'); true
// 엄격하게 검사
Number.isNaN(undefined); false
Number.isNaN({}); false
Number.isNaN('문자열'); false
Number.isNaN 이 엄격한 검사이기 때문에 좀더 신뢰성이 높다