Chapter29

samuel Jo·2023년 4월 19일
0

딥다이브

목록 보기
25/34

29.1 Math 프로퍼티

Math 는 생성자 함수 x. 정적 프로퍼티와 정적 메서드만 제공.

29.1.1 Math.PI

Math.PI; // -> 3.141592653589793

29.2 Math 메서드

29.2.1 Math.abs

인수로 전달된 숫자의 절대값을 반환. 절대값은 반드시 0 or 양수

Math.abs(-1);        // -> 1
Math.abs('-1');      // -> 1
Math.abs('');        // -> 0
Math.abs([]);        // -> 0
Math.abs(null);      // -> 0
Math.abs(undefined); // -> NaN
Math.abs({});        // -> NaN
Math.abs('string');  // -> NaN
Math.abs();          // -> NaN

29.2.2 Math.round

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

Math.round(1.4);  // -> 1
Math.round(1.6);  // -> 2
Math.round(-1.4); // -> -1
Math.round(-1.6); // -> -2
Math.round(1);    // -> 1
Math.round();     // -> NaN

29.2.3 Math.ceil

올림메서드

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

29.2.4 Math.floor

내림 메서드 . ceil 반대 개념

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

29.2.5 Math.sqrt

인수로 전달된 숫자의 제곱근을 반환.

Math.sqrt(9);  // -> 3
Math.sqrt(-9); // -> NaN
Math.sqrt(2);  // -> 1.414213562373095
Math.sqrt(1);  // -> 1
Math.sqrt(0);  // -> 0
Math.sqrt();   // -> NaN

관련문제 (codewars)

29.2.6 Math.random

임의의 난수를 반환. 0~1미만 실수 0은 포함 , 1은 x

Math.random(); // 0에서 1 미만의 랜덤 실수(0.8208720231391746)

/*
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 범위의 정수

조금만 찾아보면 나오는 내용이지만, random메서드는 완벽한 난수생성이 안됨.

Math.random() 함수는 0부터 1 사이의 값을 무작위로 반환. 그러나 이 값은 컴퓨터에서 생성된 난수이므로, 사실상 예측 가능. 또한, Math.random() 함수는 난수의 분포도 균등하지 않음. 예를 들어, 0.5보다 작은 값이 0.5보다 큰 값보다 더 자주 생성. 이러한 문제는 보안 요구사항이 높은 시스템에서는 심각한 문제가 될 수 있음.

// node.js환경에서 crypto모듈 사용시. 

const crypto = require('crypto');

// 16 bytes 길이의 보안용 난수 생성
const secureRandomBytes = crypto.randomBytes(16);

// 0~99 범위 내의 보안용 난수 생성
const secureRandomNumber = crypto.randomInt(0, 100);

29.2.7 Math.pow

첫번째 인수를 밑(base), 두번째 인수를 지수로 거듭제곱한 결과를 반환.

Math.pow(2, 8);  // -> 256
Math.pow(2, -1); // -> 0.5
Math.pow(2);     // -> NaN

// ES7 지수 연산자
2 ** 2 ** 2; // -> 16
Math.pow(Math.pow(2, 2), 2); // -> 16

29.2.8 Math.max

전달받은 인수중 최고값을 반환. 인수없으면 -Infinity반환.

Math.max(1); // -> 1
Math.max(1, 2); // -> 2
Math.max(1, 2, 3); // -> 3
Math.max(); // -> -Infinity


// 배열 요소 중에서 최대값 취득
Math.max.apply(null, [1, 2, 3]); // -> 3

// ES6 스프레드 문법
Math.max(...[1, 2, 3]); // -> 3

두가지의 차이점을 좀더 보자면

// reduce를 통해 합계를 내는 코드 (apply)
const numbers = [1, 2, 3, 4, 5];

const sum = Array.prototype.reduce.apply(numbers, [
  function(accumulator, currentValue) {
    return accumulator + currentValue;
  },
  0
]);

console.log(sum); // 15

// apply(thisarg,[array]) 여기서 thisarg는 numbers라는 전역의 this를 설정 해주는거임.

// 그냥reduce만 쓰자면 이렇다.
const numbers = [1, 2, 3, 4, 5];

const sum = numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0);

console.log(sum); // 15

// 스프레드 문법을 사용한 합계 코드
const numbers = [1, 2, 3, 4, 5];

const sum = Math.max(...numbers);

console.log(sum); // 5


29.2.9 Math.min

전달받은 인수중 가장 작은값을 반환. 인수없으면 Infinity반환.

Math.min(1); // -> 1
Math.min(1, 2); // -> 1
Math.min(1, 2, 3); // -> 1
Math.min(); // -> Infinity

// 배열 요소 중에서 최소값 취득
Math.min.apply(null, [1, 2, 3]); // -> 1

// ES6 스프레드 문법
Math.min(...[1, 2, 3]); // -> 1
profile
step by step

0개의 댓글