Menurut MDN Math.min hanya menerima angka, dan jika salah satu argumen bukan angka, itu akan kembali NaN
. Memang benar bahwa jika kita melewatkan sebuah array dengan beberapa nomor yang kita dapatkan NaN
, seperti ini: Math.min([1,2])
, tetapi jika kita menggunakan array dengan hanya satu nomor, Math.min
akan mengembalikan nomor dalam array, seperti dalam contoh ini: Math.min([5])
. Adakah yang tahu mengapa kita melihat perilaku tidak berdokumen ini?
javascript
math
seseorang235
sumber
sumber
Jawaban:
Bukan itu yang dikatakannya ( penekanan berani saya):
Jenis Konversi:
Math.min
gunakanToNumber
untuk mengkonversi argumennya.ToNumber
gunakanToPrimitive
untuk mengonversiObject
s (danArray
s adalahObject
s).ToPrimitive
menggunakantoString
[5].toString()
adalah'5'
, yang dikembalikan keToPrimitive
, yang mengembalikannyaToNumber
, yang mem-parsing ke5
dan mengembalikannya keMath.min
, yang merupakan argumen yang valid, karena tidakNaN
.[1, 2].toString()
, OTOH, adalah'1, 2'
, yang dikembalikan keToPrimitive
, yang mengembalikannyaToNumber
, yang menguraikannyaNaN
, karena itu bukan representasi angka yang valid.ToNumber
lalu beralihNaN
keMath.min
, yang kemudian akan kembaliNaN
, karena (seperti yang dinyatakan MDN) "salah satu argumennya tidak dapat dikonversi ke angka" atau (seperti yang dinyatakan oleh spec) "Jika ada nilai NaN, hasilnya adalah NaN.".sumber
Number([1,2]);
hasil NaN tapiNumber([1])
hasil 1.