SPACE RUMI

Hi, I am rumi. Let's Splattack!

[STUDY] 스터디/Deep Dive JS

js Number 그리고 Math

백루미 2023. 1. 3. 02:17
반응형

표준 빌트인 객체 Number

생성자 함수 객체이므로, new와 함께 호출 하여 인스턴스를 생성할 수 있다.
new 연산자를 사용하지 않고 호출하면, Number인스턴스가 아닌 숫자를 반환하고, 이를 통해 명시적으로 타입을 변환하기도 한다.

Number(true) // 1
Number(false) // 0

Number('0') // 0

 

Number.EPSILON

Number.EPSILON은 2.2204460492503130808472633361816E-16 값으로,
1과 1보다 큰 숫자 중에서 가장 작은 숫자와의 차이와 같다.  (이게 몬소리지? 아래 예제를 보자)

부동소수점 산술 연산은 정확한 결과를 기대하기 어렵다.

0.1 + 0.2; // 0.30000000000000004
0.1 + 0.2 === 0.3 // false

function isEqual(a,b){
	// a-b를 한 절대값이 Number.EPSILON보다 작으면 같은 수로 인정한다.
	return Math.abs(a-b) < Number.EPSILON;
}

isEqual(0.1+0.2, 0.3) // true

 

Number.MAX_VALUE

자바스크립트에서 표현할 수 있는 가장 큰 양수 값 1.7976931348623157e+308
이보다 더 크면 Infinity다.

 

Number.MIN_VALUE

자바스크립트에서 표현할 수 있는 가장 작은 양수 값 5e-324 (5*10의 -324승)
이보다 작으면 0이다.

 

Number.NaN

Not-a-Number. window.NaN과 같다.
NaN끼리는 비교시 모두 false다.

NaN === NaN // false
Number.NaN === NaN // false
Number.NaN === window.NaN // false

const test = Math.max('hello',3) // NaN
test == NaN //false

 

Number.isNaN

인수로 전달된 값이 NaN인지 검사하여 결과를 boolean값으로 반환한다.

const test = Math.max('hello',3)
isNaN(test) // true

isNaN(NaN) // true 빌트인 전역함수인 isNaN은 인수를 숫자로 암묵적 타입변환 한다.
Number.isNaN(NaN) // true

Number.isNaN('this is string') // false. 숫자가 아닌 인수가 주어졌을때 언제나 false다
isNaN('this is string') // true

빌트인 전역객체인 isNaN은 전달받은 인수를 암묵적으로 숫자로 타입변환 시킨다.
Number.isNaN 메서드숫자가 아닌 인수를 전달받으면 언제나 false다.

 

Number.prototype.toFixed

숫자를 반올림하여 문자열로 반환한다.

(1234.5678).toFixed(); // "1235"
(1234.5678).toFixed(1); // "1234.6" 소수점 1자리까지 보여줌

 

Number.prototype.toString

숫자를 문자열로 변환하여 반환한다. 2~36 사이 정수값을 인수로 전달하면 n진법 문자열을 반환한다.

(1234).toString(); // '1234'
(1234).toString(2); // '10011010010' 2진법 문자열으로 변환
(1234).toString(16); // '4d2' 16진법 문자열로 반환 (0~9 A~F)

 

표준 빌트인 객체 Math

Math는 생성자 함수가 아니므로 정적 프로퍼티와 정적메서드만 제공한다.

 

Math.PI

Math.PI는 Math 프로퍼티이다. 원주율 PI값을 반환한다.

Math.PI // 3.141592653589793

 

Math.abs

abs가 뭔뜻이지 했는데 'absolute value'의 세음절이였다. (아하..?)
인수로 전달된 숫자의 절대값을 반환한다. 절대값은 반드시 0이상의 양수이어야한다.
빈값은 NaN

Math.abs(-1) // 1
Math.abs(-328) // 328
Math.abs("294") // 294
Math.abs('') // 0
Math.abs(null) // 0
Math.abs(undefined) // NaN
Math.abs({}) // NaN
Math.abs("hello") // NaN
Math.abs() // NaN

 

Math.round

인수로 전달된 숫자의 소수점 이하를 반올림한 정수를 반환한다.
빈값은 NaN

Math.round(1.6) // 2
Math.round(-1.6) // -2

Math.round('3.2') // 3 string도 숫자로 형변환 
Math.round(); // NaN

 

Math.ceil

인수로 전달된 숫자의 소수점 이하를 올림.
올림하면 더 큰수가 된다. 빈값은 NaN

Math.ceil(1.1) // 2
Math.ceil(-1.1) // -1

Math.ceil('3.1') // 4 string도 숫자로 형변환 
Math.ceil() // NaN

 

Math.floor

인수로 전달된 숫자의 소수점 이하를 내림.
내림하면 더 작은수가 된다. 빈값은 NaN

Math.floor(1.9) // 1
Math.floor(-1.5) // -2 음수면 숫자가 커져야 더 작은값이니까..

Math.floor() // NaN

 

Math.sqrt

인수로 전달된 숫자의 제곱근을 반환한다.
빈값은 NaN

Math.sqrt(9) // 3
Math.sqrt(2) // 1.4142135623730951

Math.sqrt(-9) // NaN 제곱근은 음수가 나올수없음
Math.sqrt() // NaN

 

Math.random

0부터 1미만의 실수를, 임의의 난수(랜덤숫자)로 반환한다.  (0포함 1미포함)

Math.random() // 0.3527292457067417 같은 무작위값이 나옴

Math.floor(Math.random() * 10) // 0 ~ 9까지의 랜덤값이 나옴

 

Math.pow

pow는 power의 약자고, 수학에서는 거듭제곱을 의미한다.
첫번째 인수를 밑으로, 두번째 인수를 지수로 거듭제곱한 결과를 반환한다.

Math.pow(2, 8) // 256 (2의 8제곱) 
Math.pow(2, -1) // 0.5 (2의 -1제곱)

Math.pow(2) // NaN (2의 undefiend제곱)

*Math.pow보다 ES7에서 도입된 지수연산자를 사용하는게 더 가독성이 좋다.

2 ** 8 // 256
2 ** 2 ** 2 // Math.pow(2, Math.pow(2, 2)); // 16 pow는 뒤쪽 부터다
2 ** 2 ** 3 // Math.pow(2, Math.pow(2, 3)) // 256 당연히 앞에꺼먼저 계산인줄알았는데 뒤부터 pow시킨다
(2 ** 2) ** 3 // Math.pow(Math.pow(2,2),3) // 64 앞에꺼먼저 해주려면 괄호 써야한다

헷갈리게도 만들어놨다..

 

Math.max

인수 중 가장 큰 수를 반환한다.

Math.max(1,3,5,7,9) // 9
Math.max(...[1,3,5,7,9]) // 9

Math.max() //Infinity

 

Math.min

인수 중 가장 작은 수를 반환한다.

Math.min(1,3,5,7,9) // 1
Math.min(...[1,3,5,7,9]) // 1

Math.min() // Infinity
반응형