Math.minが1つの要素配列で機能する理由


17

MDNによると、Math.minは数字のみを受け入れ、引数の1つが数字でない場合、を返しNaNます。それは我々が複数の番号を持つ配列を渡す場合は、私たちが得ることは事実だNaN。このように、: Math.min([1,2])、私たちはただ1番号を持つ配列を使用する場合、Math.minこの例のように、アレイ内の番号を返しますMath.min([5])。この文書化されていない動作を見る理由は誰にもわかりますか?


回答:


47

MDNに よるとMath.min、数字のみを受け入れ、引数の1つが数字でない場合はを返しNaNます。

それはそれが言っていることではありません(大胆な強調鉱山):

少なくとも1つの引数数値に変換できない場合、結果はになりNaNます。

型変換:

  • Math.minToNumber引数を変換するために使用します。
  • ToNumbersのToPrimitive変換に使用しますObjectArraysは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はそれを述べたように)(これはスペック状態)又は「引数の1つを数値に変換することができない」ので、「任意の値がNaNである場合、結果はNaNです。」。

25
ECMAScriptの仕様は実際、驚くほど読みやすいものであることがわかりました。
ヨルグWミットタグ

3
はい。Number([1,2]);NaNのが、結果Number([1])結果1
Bhojendra Rauniyar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.