क्यों Math.min एक तत्व सरणी के साथ काम करता है


17

MDN Math.min के अनुसार केवल संख्याओं को स्वीकार करता है, और यदि कोई तर्क एक संख्या नहीं है, तो वह वापस आ जाएगी NaN। ऐसा नहीं है कि अगर हम एक से अधिक संख्या के साथ एक सरणी पारित करने पर हम पाते सच है NaN, इस तरह: Math.min([1,2]), लेकिन अगर हम सिर्फ एक संख्या के साथ एक सरणी का उपयोग करें, Math.minइस उदाहरण में सरणी में नंबर वापस आ जाएगी, जैसे: Math.min([5])। क्या किसी को इस बात का अंदाजा है कि हम इस अनजाने व्यवहार को क्यों देखते हैं?


जवाबों:


47

एमडीएन के अनुसार Math.minकेवल संख्याओं को स्वीकार करता है, और यदि कोई तर्क एक संख्या नहीं है, तो यह वापस आ जाएगी NaN

ऐसा नहीं है कि यह कहता है ( बोल्ड जोर मेरा):

यदि कम से कम एक तर्क को एक संख्या में नहीं बदला जा सकता है , तो इसका परिणाम है NaN

प्रकार रूपांतरण:

  • Math.minToNumberअपने तर्कों को परिवर्तित करने के लिए उपयोग करता है।
  • ToNumberका उपयोग ToPrimitiveकरने के लिए Objects (और Arrays हैं Object)।
  • ToPrimitive का उपयोग करता है toString
  • [5].toString()वह है '5', जो वापस लौटता है ToPrimitive, जो इसे लौटाता है ToNumber, जो इसे 5देता है और इसे वापस कर देता है Math.min, जिसके लिए यह एक वैध तर्क है, क्योंकि यह नहीं है NaN
  • [1, 2].toString(), OTOH, है '1, 2', जो वापस लौटता है ToPrimitive, जो इसे लौटाता है ToNumber, जो इसे देता है NaN, क्योंकि यह एक वैध संख्या प्रतिनिधित्व नहीं है। ToNumberफिर पास NaNहोता है Math.min, जो फिर वापस आ जाएगा NaN, क्योंकि (जैसा कि एमडीएन यह बताता है) "इसके एक तर्क को एक नंबर में नहीं बदला जा सकता" या (जैसा कि यह बताता है) "यदि कोई मान NaN है, तो परिणाम NaN है।"

25
ECMAScript कल्पना वास्तव में आश्चर्यजनक रूप से पठनीय है, मुझे अभी पता चला है।
जोर्ग डब्ल्यू मित्तग

3
हाँ। Number([1,2]);NaN लेकिन परिणाम Number([1])परिणाम 1.
Bhojendra Rauniyar
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.