JavaScript의 Mathmin/max 동작의 주의점

5779 단어 JavaScripttech
기사 작성일자:2019/05
Math.min/Math.max를 사용하면 생각보다 잘 어울리는 행동을 할 수 있으니 정리하고 싶습니다.
이번에 쓴 일은 MDN에도 기재되어 있다.
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Math/max

Math.min / Math.max에서 수치로 변환할 수 없는 것이 있으면 NaN을 되돌려줍니다


먼저, 이 함수는 NaN에 적용한 매개변수를 혼합한 상태에서 NaN으로 반환됩니다.
Math.min(1, 2, 3, NaN)
// => NaN
그런 다음 받은 매개변수를 모두 Number에 할당합니다.
Math.min(10, undefined)
// => NaN
Math.min(10, "foo")
// => NaN
Number를 통해 할당되어 수치가 되는 방법으로 처리
Math.min(10, null)
// => 0 ( NUmber(null)が0として評価される)
Math.min(10, true)
// => 1 ( Number(true)が1として評価される)
수치로 변환하면 어떻게 되는지 기억 게임이 많은 곳이 있으니 이런 값을 입력하지 않는 게 좋다.

Math.min / Math.max가 빈 매개변수에서 Infinity로 반환됨


대충 쓰면 이런 느낌이에요.
Math.min()
// => Infinity
Math.max()
// => -Infinity
min,max 등 함수에 아무것도 들어가지 않은 상황에서 하는 행동은 언어별로 달라지지만 자바스크립트는 그런 것 같다.
왜 이렇게 됐는지, 아래의 유익한 기사가 있으니 자네에게 맡기고 싶군.
  • https://qiita.com/KtheS/items/9811b88d6e7edbf32f36
  • https://charlieharvey.org.uk/page/why_math_max_is_less_than_math_min
  • (각각 Reduce 함수의 초기 값으로 사용된다고 생각하면 개인이 이해하기 어렵다)

    언제 주의합니까?


    "아니야, 아니야. 보통 그렇게 안 쓰지."이런 생각도 들었을 거라고 생각해서 내가 이런 행동을 알게 된 경과를 적어봤다.
    확실히 보통 일어나지 않지만, 이렇게 Filter와 조합해서 쓰고 싶다면 조금 주의하는 게 좋을 것 같아요.
    const items = [item1, item2]
      .map(Number) // ここでNaNが混じりうる
    
    Math.min(...items)
    // => NaNになりうる
    
    const items = [item1, item2]
      .filter(item => item > 0) // ここでitemsが空配列になりうる
    
    Math.min(...items)
    // => Infinityになりうる
    
    참고로 상기 코드에서Math.min(...items)처럼spread를 교부하여 배열하는 것은 일반적으로 매우 편리하다.
    예전에 Math.min.apply(null, items) 이런 형식으로 사용했던 것은 매우 간단하게 썼다.

    좋은 웹페이지 즐겨찾기