Math 는 수학적인 상수와 함수를 위한 프로퍼티와 메서드를 제공한다.
Math 는 생성자 함수가 아니다.
--> Math 는 정적 프로퍼티와 정적 메서드만을 제공하는 표준 빌트인 객체이다!
원주율 PI 값을 반환한다.
--> 그래픽 작업을 하는 경우 사용한다.
Math.round 메서드는 인수로 전달된 숫자의 소수점 이하를
--> 반올림(0~4면 버리고, 5~9면 버린다.)한 정수를 반환한다.
인수를 전달하지 않으면 --> NaN을 반환한다.
Math.round(1.4); // -> 1
Math.round(1.6); // -> 2
Math.round(-1.4); // -> -1
Math.round(-1.6); // -> -2
Math.round(1); // -> 1
// 인수를 전달하지 않으면 NaN을 반환하다.
Math.round(); // -> NaN
인수로 전달된 숫자의 소수점 이하를 올림(구하려는 자리 미만의 수를 올린다.)한 정수를 반환한다.
소수점 이하를 올림하면 더 큰 정수가 된다!
1.4 의 소수점 이하를 올림하면 --> 2 가 되고.
-1.4 의 소수점 이하를 올림하면 --> 1 이 된다!
Math.ceil(1.4); // -> 2
Math.ceil(1.6); // -> 2
Math.ceil(-1.4); // -> -1
Math.ceil(-1.6); // -> -1
Math.ceil(1); // -> 1
Math.ceil(); // -> NaN
인수로 전달된 숫자의 소숫점 이하를 내림한 정수를 반환한다.
--> Math.ceil 메서드의 반대 개념이다.
소수점 이하를 내림하면 더 작은 정수가 된다.
예를 들어, 1.9의 소수점 이하를 내림하면 1이 되고,
-1.9의 소수점 이하를 내림하면 -2가 된다.
Math.floor(1.9); // -> 1
Math.floor(9.1); // -> 9
Math.floor(-1.9); // -> -2
Math.floor(-9.1); // -> -10
Math.floor(1); // -> 1
Math.floor(); // -> NaN
Math.sqrt 메서드는 인수로 전달된 숫자의 --> 제곱근을 반환한다.
Math.sqrt(9); // -> 3
Math.sqrt(-9); // -> NaN
Math.sqrt(1); // -> 1
Math.sqrt(0); // -> NaN
Math.random 메서드는 임의의 난수(랜덤 숫자)를 반환한다.
Math.random 메서드가 반환한 난수는 0에서 1미만의 실수이다!
--> 즉, 0은 포함되지만 1은 포함되지 않는다.
실제로 완전히 랜덤하지는 않다고 한다!
계속 반복 하다보면 어떠한 패턴이 일정하게 반복되는 것을 확인할 수 있다.
--> 따라서 완벽한 난수를 만들어 주지는 않는다!
Math.random(); // 0에서 1미만의 랜덤 실수
/*
1에서 10범위의 랜덤 정수 취득
1) Math.random 으로 0에서 1미만의 랜덤 실수를 구한 다음
10을 곱해 0에서 10 미만의 랜덤 실수를 구한다.
2) 0에서 10미만의 랜덤 실수에 1을 더해 1에서 10 범위의 랜덤 실수를 구한다.
3) Math.floor로 1에서 10 범위의 랜덤 실수의 소수점 이하를 떼어 버린 다음 정수를 반확한다.
*/
const random = Math.floor((Math.random() * 10) + 1);
console.log(random); // 1에서 10 범위의 정수
Math.pow 메서드는 첫 번째 인수를 밑으로, 두 번째 인수를 지수로 거듭제곱한 결과를 반환하다.
--> Math.pow 메서드 대신 지수 연산자를 사용하면 가독성이 더 좋다!
// ES7 지수 연산자
console.log(2 ** (2 ** 2)); // -> 16
Math.pow(Math.pow(2, 2), 2); // -> 16
Math.max 메서드는 전달받은 인수 중에서 가장 큰 수를 반환한다.
--> 인수가 전달되지 않으면 -Infinity를 반환한다.
Math.max(1); // -> 1
Math.max(1, 2); // -> 2
Math.max(1, 2, 3); // -> 3
Math.max(); // -> -Infinity
배열을 인수로 전달받아 배열의 요소 중에서 최대값을 구하려면
Function.prototype.apply 메서드 또는 스프레드 문법을 사용해야 한다.
// 배열 요소 중에서 최대값 취득
Math.max.apply(null, [1, 2, 3]); // -> 3
// ES6 스프레드 문법
Math.max(...[1, 2, 3]); // -> 3
Math.min 메서드는 전달받은 인수 중에서 가장 작은 수를 반환한다.
인수가 전달되지 않으면 Infinity 를 반환한다.
배열을 인수로 전달받아 배열의 요소 중에서 최소값을 구하려면
--> Function.prototype.apply 메서드 또는 스프레드 문법을 사용해야 한다.
// 배열 요소 중에서 최소값 취득
// apply의 첫 번째 인수로 null을 전달한 이유는
// 아래의 코드에서 apply 메서드를 호출한 이유는
// min 메서드에 배열을 전달하고자 함이기 때문이다!
// 따라서 this 바인딩이 중요하지 않기에 null 을 적었다!
Math.min.apply(null, [1, 2, 3]); // -> 1
// ES6 스프레드 문법
Math.min(...[1, 2, 3]); // -> 1