Math.min이 단일 요소 배열에서 작동하는 이유


17

MDN 에 따르면 Math.min은 숫자 만 허용하며 인수 중 하나가 숫자가 아닌 경우를 반환 NaN합니다. 여러 개의 숫자로 배열을 전달하면 다음과 NaN같이 얻을 수 Math.min([1,2])있습니다. 단 하나의 숫자로만 배열을 사용하면 Math.min이 예와 같이 배열의 숫자를 반환합니다 Math.min([5]). 왜 우리가이 문서화되지 않은 행동을 보는지 알고 있습니까?


16
자바 스크립트입니다. 이것은 언어에서 찾을 수있는 가장 이상한 유형 변환 / 강제 문제와거리멀다 .
Mason Wheeler

답변:


47

MDN 에 따르면 Math.min숫자 만 허용하고 인수 중 하나가 숫자가 아닌 경우을 반환 NaN합니다.

그것이 말하는 것이 아닙니다 ( 굵게 강조한 광산).

하나 이상의 인수 숫자 로 변환 할 수없는 경우 결과는 NaN입니다.

타입 변환 :

  • Math.minToNumber인수를 변환하는 데 사용 합니다.
  • ToNumberToPrimitive을 변환 하는 데 사용 합니다 Object( Arrays는 Objects 임).
  • ToPrimitive 사용 toString
  • [5].toString()이다 '5'반환 도착하는, ToPrimitive그것은에 반환, ToNumber그것을 구문 분석하는 5반환이에 Math.min이 아니기 때문에, 유효한 인수되는, NaN.
  • [1, 2].toString(), OTOH '1, 2'는로 반환되며 ToPrimitive,로 반환됩니다 .이 숫자는 유효한 숫자 표현이 아니기 때문에로 ToNumber구문 분석됩니다 NaN. ToNumber다음 패스 NaNMath.min다음 반환하는 NaN(MDN 그것을 상태로) (이것은 투기 상태) 또는 "인수 중 하나는 숫자로 변환 할 수"있기 때문에 "값이 NaN 인 경우, 결과는 NaN이된다.".

25
ECMAScript 사양은 실제로 놀랍게도 읽을 수 있습니다.
Jörg W Mittag

3
예. 는 Number([1,2]);NaN이 있지만, 결과 Number([1])결과 1
Bhojendra Rauniyar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.