JavaScript의 Mathmin/max 동작의 주의점
5779 단어 JavaScripttech
Math.min/Math.max를 사용하면 생각보다 잘 어울리는 행동을 할 수 있으니 정리하고 싶습니다.
이번에 쓴 일은 MDN에도 기재되어 있다.
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 등 함수에 아무것도 들어가지 않은 상황에서 하는 행동은 언어별로 달라지지만 자바스크립트는 그런 것 같다.왜 이렇게 됐는지, 아래의 유익한 기사가 있으니 자네에게 맡기고 싶군.
언제 주의합니까?
"아니야, 아니야. 보통 그렇게 안 쓰지."이런 생각도 들었을 거라고 생각해서 내가 이런 행동을 알게 된 경과를 적어봤다.
확실히 보통 일어나지 않지만, 이렇게 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)
이런 형식으로 사용했던 것은 매우 간단하게 썼다.
Reference
이 문제에 관하여(JavaScript의 Mathmin/max 동작의 주의점), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/terrierscript/articles/2019-05-03-javascript-math-min-max텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)