ES2015 के रूप में दो विधियाँ हैं।
यह ऑब्जेक्ट फ़ंक्शंस में बनाया गया है, और यह एक फ़ंक्शन के तर्क को उचित रूप से संदर्भित करता है। यह तकनीकी रूप से एक सरणी नहीं है, हालाँकि, विशिष्ट प्रकार के ऑपरेशन इस पर काम नहीं करेंगे। सुझाई गई विधि का उपयोग करना है Array.from
या उससे एक सरणी बनाने के लिए प्रसार ऑपरेटर का उपयोग करना है।
मैंने अन्य उत्तर का उपयोग करते हुए उल्लेख किया है slice
। ऐसा मत करो। यह अनुकूलन को रोकता है (स्रोत: एमडीएन )।
Array.from(arguments)
[...arguments]
हालाँकि, मैं तर्क दूंगा कि arguments
यह समस्याग्रस्त है क्योंकि यह छिपाता है कि एक फ़ंक्शन इनपुट के रूप में क्या स्वीकार करता है। एक arguments
फ़ंक्शन आमतौर पर इस तरह लिखा जाता है:
function mean(){
let args = [...arguments];
return args.reduce((a,b)=>a+b) / args.length;
}
कभी-कभी, फ़ंक्शन हेडर को सी-लाइक फ़ैशन में तर्कों को दस्तावेज़ करने के लिए निम्न प्रकार लिखा जाता है:
function mean(/* ... */){ ... }
लेकिन ऐसा कम ही होता है।
उदाहरण के लिए, समस्याग्रस्त क्यों है, C को लें। C, K & R C. K & R C के रूप में जानी जाने वाली भाषा की एक प्राचीन पूर्व-ANSI बोली के साथ पीछे की ओर संगत है, फ़ंक्शन प्रोटोटाइप को खाली तर्क सूची रखने की अनुमति देता है।
int myFunction();
/* This function accepts unspecified parameters */
ANSI C एक खाली तर्क-सूची निर्दिष्ट करने के लिए varargs
( ...
), और के लिए एक सुविधा प्रदान करता है void
।
int myFunction(void);
/* This function accepts no parameters */
कई लोग अनजाने में एक unspecified
तर्क सूची ( int myfunction();
) के साथ फ़ंक्शन की घोषणा करते हैं , जब वे फ़ंक्शन से शून्य तर्क लेने की अपेक्षा करते हैं। यह तकनीकी रूप से एक बग है क्योंकि फ़ंक्शन तर्कों को स्वीकार करेगा । उनमें से कोई भी संख्या।
varargs
सी में एक उचित कार्य रूप लेता है:
int myFunction(int nargs, ...);
और जावास्क्रिप्ट वास्तव में इस के समान कुछ है।
मैंने आपको पहले ही फैले हुए ऑपरेटर को दिखाया है, वास्तव में।
...name
यह बहुत बहुमुखी है, और एक अच्छी तरह से प्रलेखित फैशन में वार्गर्स निर्दिष्ट करने के लिए एक फ़ंक्शन के तर्क-सूची ("बाकी मापदंडों") में भी इस्तेमाल किया जा सकता है:
function mean(...args){
return args.reduce((a,b)=>a+b) / args.length;
}
या लंबोदर अभिव्यक्ति के रूप में:
((...args)=>args.reduce((a,b)=>a+b) / args.length)(1,2,3,4,5); // 3
मैं प्रसार ऑपरेटर को बहुत पसंद करता हूं। यह स्वच्छ और स्व-दस्तावेजीकरण है।
for - in
साथ लूप का उपयोग करने के लिए इसका अच्छा विचार नहीं हैarguments
-length
संपत्ति पर लूप के लिए एक 'सामान्य' इसके बजाय इस्तेमाल किया जाना चाहिए