क्या एक अज्ञात संख्या में तर्क पारित करने का एक तरीका है:
var print_names = function(names) {
foreach(name in names) console.log(name); // something like this
}
print_names('foo', 'bar', 'baz');
इसके अलावा, मुझे किस तरह की दलीलें मिलेंगी?
क्या एक अज्ञात संख्या में तर्क पारित करने का एक तरीका है:
var print_names = function(names) {
foreach(name in names) console.log(name); // something like this
}
print_names('foo', 'bar', 'baz');
इसके अलावा, मुझे किस तरह की दलीलें मिलेंगी?
.apply । अन्य लोग दिखाते हैं कि अज्ञात संख्या के तर्कों को (फ़ंक्शन के भीतर से) (उपयोग करके ) कैसे पढ़ा जाएarguments ।
जवाबों:
आप किसी भी जावास्क्रिप्ट फ़ंक्शन को दिए गए तर्कों को जादू की argumentsवस्तु के माध्यम से एक्सेस कर सकते हैं , जो एक सरणी के समान व्यवहार करता है। argumentsअपने फ़ंक्शन का उपयोग करना पसंद करेंगे
var print_names = function() {
for (var i=0; i<arguments.length; i++) console.log(arguments[i]);
}
ऐसा नहीं है कि नोट के लिए महत्वपूर्ण है argumentsहै नहीं एक सरणी। MDC के पास कुछ अच्छे दस्तावेज हैं: https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#Using_the_arguments_object
आप चालू करना चाहते हैं argumentsएक सरणी में इतना है कि आप की तरह कर सकते हैं .slice(), .push()आदि, कुछ इस तरह उपयोग करें:
var args = Array.prototype.slice.call(arguments);
एक बेहतर तरीका है! नए बाकी पैरामीटर फ़ीचर में आपकी पीठ है:
var print_names = function(...names) {
for (let i=0; i<names.length; i++) console.log(names[i]);
}
spread syntaxयहां काफी गलत है। यह एक rest parameterउदाहरण है जो आपने दिया था। अच्छा जवाब है, लेकिन यह भ्रमित करते हुए कि इसे संदर्भित किया जाता हैspread
Array.prototype.slice.call(arguments): medium.com/@andrewsburke/…
बाकी पैरामीटर सिंटैक्स का लाभ उठाएं ।
function printNames(...names) {
console.log(`number of arguments: ${names.length}`);
for (var name of names) {
console.log(name);
}
}
printNames('foo', 'bar', 'baz');
बाकी मापदंडों और तर्क ऑब्जेक्ट के बीच तीन मुख्य अंतर हैं:
var
print_names = function() {
console.log.apply( this, arguments );
};
print_names( 1, 2, 3, 4 );
function print_args() {
for(var i=0; i<arguments.length; i++)
console.log(arguments[i])
}
जावास्क्रिप्ट में प्रत्येक फ़ंक्शन के लिए एक छिपी हुई वस्तु पारित की जाती है arguments।
आप arguments.lengthफ़ंक्शन में पारित तर्कों की मात्रा प्राप्त करने के लिए उपयोग करेंगे ।
तर्कों के माध्यम से पुनरावृत्ति करने के लिए, आप एक लूप का उपयोग करेंगे:
for(var i = arguments.length; i--) {
var arg = arguments[i];
}
ध्यान दें कि argumentsएक वास्तविक सरणी नहीं है, इसलिए यदि आपको एक सरणी के रूप में इसकी आवश्यकता है तो आप इसे इस तरह परिवर्तित करेंगे:
var args = Array.prototype.slice.call(arguments);
var args = Array.prototype.slice.call(arguments);, var args = Array.apply(null, arguments);, आदि , कई तरीके हैं ...
arguments.length। आप उस पर एक लूप के लिए उपयोग कर सकते हैं।
(function () {
for (var a = [], i = arguments.length; i--;) {
a.push(arguments[i]);
};
return a;
})(1, 2, 3, 4, 5, 6, 7, 8)
forब्लॉक के बाद सिर्फ अर्धविराम की वास्तव में जरूरत नहीं है, हालांकि मैं अंतिम पंक्ति के अंत में एक जोड़ूंगा ।
ES6 के लिए अब बहुत बेहतर है
function Example() {
return {
arguments: (...args) =>{
args.map(a => console.log());
}
}
}
var exmpl = new Example();
exmpl.arguments(1, 2, 3, 'a', 'b', 'c');
आशा है कि ये आपकी मदद करेगा
ईएस 6 में बाकी पैरामीटर
const example = (...args) => {
for (arg in args) {
console.log(arg);
}
}
नोट: आप बाकी पैरामेट्स से पहले नियमित पैरामीटर पास कर सकते हैं
const example = (arg1, ...args) => {
console.log(arg1);
for (arg in args) {
console.log(arg);
}
}
आप अपने मापदंडों को किसी सरणी में इकट्ठा करने के लिए स्प्रेड / रेस्ट ऑपरेटर का उपयोग कर सकते हैं और फिर lengthसरणी आपके द्वारा पास किए गए मापदंडों की संख्या होगी:
function foo(...names) {
console.log(names);
return names;
}
console.log(foo(1, 2, 3, 4).length);
BabelJS का उपयोग करके मैंने फ़ंक्शन को oldschool JS में परिवर्तित कर दिया है:
"use strict";
function foo() {
for (var _len = arguments.length, names = new Array(_len), _key = 0; _key < _len; _key++) {
names[_key] = arguments[_key];
}
console.log(names);
return names;
}
let x = function(){
return [].slice.call(arguments);
};
console.log(x('a','b','c','d'));
मुझे यह करना पसंद है:
यदि आप तर्कों की संख्या नहीं जानते हैं तो यह मदद नहीं करेगा, लेकिन अगर आप उनमें से आदेश को याद नहीं रखना चाहते हैं तो यह मदद करता है।
/**
* @param params.one A test parameter
* @param params.two Another one
**/
function test(params) {
var one = params.one;
if(typeof(one) == 'undefined') {
throw new Error('params.one is undefined');
}
var two = params.two;
if(typeof(two) == 'undefined') {
throw new Error('params.two is undefined');
}
}