Math.min neden tek elemanlı bir dizi ile çalışıyor


17

MDN'ye göre Math.min sadece sayıları kabul eder ve bağımsız değişkenlerden biri sayı değilse, geri döner NaN. Biz birden sayılarla dizisi geçirirseniz aldığımız doğrudur NaNbu gibi: Math.min([1,2])ama biz sadece bir sayı ile bir dizi kullanırsanız, Math.minbu örnekte olduğu gibi, dizideki sayısını döndürür: Math.min([5]). Bu belgelenmemiş davranışı neden gördüğümüz hakkında bir fikri olan var mı?


Yanıtlar:


47

MDN'ye göre Math.minsadece sayıları kabul eder ve bağımsız değişkenlerden biri sayı değilse, geri döner NaN.

Yazdığı bu değil ( cesur vurgu benim):

Bağımsız değişkenlerden en az biri sayıya dönüştürülemezse sonuç olur NaN.

Tür Dönüşümü:

  • Math.minToNumberargümanlarını dönüştürmek için kullanır .
  • ToNumberToPrimitivedönüştürmek için kullanır Objects (ve Arrays Objects).
  • ToPrimitive kullanımları toString
  • [5].toString()olduğu '5'döndü alır ki, ToPrimitiveo kadar döndüren ToNumberbunu ayrıştırır hangi 5ve iadeler o kadar Math.mindeğil, çünkü geçerli bir argüman olduğu, NaN.
  • [1, 2].toString(), OTOH, geçerli bir sayı gösterimi olmadığından , '1, 2'döndürülen ToPrimitive, döndüren ToNumber, ayrıştırılan değerdir NaN. ToNumberDaha sonra geçer NaNiçin Math.mindaha sonra geri döner ki, NaN(MDN belirttiği gibi) (spec durumlar gibi) ya da "bağımsız değişkenler biri bir dizi dönüştürülemez çünkü", "herhangi bir değer NaN ise, sonuç NaN olur.".

25
ECMAScript özellikleri aslında şaşırtıcı bir şekilde okunabilir, yeni öğrendim.
Jörg W Mittag

3
Evet. Number([1,2]);NaN ama sonuçları Number([1])sonuçları 1.
Bhojendra Rauniyar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.