PHP में वहाँ है func_num_args
और func_get_args
, वहाँ कुछ जावास्क्रिप्ट के लिए इसी तरह की है?
PHP में वहाँ है func_num_args
और func_get_args
, वहाँ कुछ जावास्क्रिप्ट के लिए इसी तरह की है?
जवाबों:
का उपयोग करें arguments
। आप इसे एक ऐरे की तरह एक्सेस कर सकते हैं। arguments.length
तर्कों की संख्या के लिए उपयोग करें ।
तर्क है एक सरणी जैसी वस्तु (नहीं एक वास्तविक सरणी)। उदाहरण समारोह ...
function testArguments () // <-- notice no arguments specified
{
console.log(arguments); // outputs the arguments to the console
var htmlOutput = "";
for (var i=0; i < arguments.length; i++) {
htmlOutput += '<li>' + arguments[i] + '</li>';
}
document.write('<ul>' + htmlOutput + '</ul>');
}
कोशिश करके देखो...
testArguments("This", "is", "a", "test"); // outputs ["This","is","a","test"]
testArguments(1,2,3,4,5,6,7,8,9); // outputs [1,2,3,4,5,6,7,8,9]
पूरा विवरण: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments
ES6 एक निर्माण की अनुमति देता है जहां एक फ़ंक्शन तर्क को "..." संकेतन के साथ निर्दिष्ट किया जाता है
function testArgs (...args) {
// Where you can test picking the first element
console.log(args[0]);
}
a = () => {console.log(arguments);}; a('foo');
देता है -- Uncaught ReferenceError: arguments is not defined
लेकिन a = (...args) => {console.log(args);}; a('foo');
देता है["foo"]
arguments
वस्तु जहां कार्यों तर्क जमा हो जाती है है।
तर्क ऑब्जेक्ट कार्य करता है और एक सरणी की तरह दिखता है, यह मूल रूप से है, इसमें सिर्फ वे तरीके नहीं हैं जो सरणियाँ करते हैं, उदाहरण के लिए:
Array.forEach(callback[, thisArg]);
Array.map(callback[, thisArg])
Array.filter(callback[, thisArg]);
Array.indexOf(searchElement[, fromIndex])
मुझे लगता है कि किसी arguments
वस्तु को वास्तविक एरे में परिवर्तित करने का सबसे अच्छा तरीका ऐसा है:
argumentsArray = [].slice.apply(arguments);
यह एक सरणी बना देगा;
पुन: प्रयोज्य:
function ArgumentsToArray(args) {
return [].slice.apply(args);
}
(function() {
args = ArgumentsToArray(arguments);
args.forEach(function(value) {
console.log('value ===', value);
});
})('name', 1, {}, 'two', 3)
परिणाम:
>
value === name
>value === 1
>value === Object {}
>value === two
>value === 3
[].slice.apply(arguments);
खिचड़ी भाषा सबसे अच्छा तरीका है क्योंकि यह एक अनावश्यक खाली सरणी आवंटन का कारण बनता है।
आप चाहें तो इसे एक ऐरे में भी बदल सकते हैं। यदि एरे जेनरिक उपलब्ध हैं:
var args = Array.slice(arguments)
अन्यथा:
var args = Array.prototype.slice.call(arguments);
से मोज़िला MDN :
आपको तर्कों पर कटाक्ष नहीं करना चाहिए क्योंकि यह जावास्क्रिप्ट इंजन (उदाहरण के लिए V8) में अनुकूलन को रोकता है।
function foo() { foo.bar = JSON.stringify(arguments); foo.baz = JSON.parse(foo.bar); }
यदि स्ट्रिंग के बजाय संरक्षण की आवश्यकता है, तो आंतरिक संरचित क्लोनिंग एल्गोरिथ्म का उपयोग करें । यदि DOM नोड्स पास हैं, तो XMLSerializer का उपयोग किसी असंबंधित प्रश्न के रूप में करें । with (new XMLSerializer()) {serializeToString(document.documentElement) }
जैसा कि कई अन्य ने बताया, arguments
किसी फ़ंक्शन के लिए दिए गए सभी तर्क शामिल हैं।
यदि आप एक ही फ़ंक्शन को उसी आर्ग के साथ कॉल करना चाहते हैं, तो उपयोग करें apply
उदाहरण:
var is_debug = true;
var debug = function() {
if (is_debug) {
console.log.apply(console, arguments);
}
}
debug("message", "another argument")
गन्नार के समान उत्तर, अधिक पूर्ण उदाहरण के साथ: आप पूरी तरह से पारदर्शी रूप से पूरी चीज़ वापस कर सकते हैं:
function dumpArguments(...args) {
for (var i = 0; i < args.length; i++)
console.log(args[i]);
return args;
}
dumpArguments("foo", "bar", true, 42, ["yes", "no"], { 'banana': true });
आउटपुट:
foo
bar
true
42
["yes","no"]
{"banana":true}
ES6 में आप कुछ इस तरह से कर सकते हैं:
function foo(...args)
{
let [a,b,...c] = args;
console.log(a,b,c);
}
foo(1, null,"x",true, undefined);
ES6 में, उपयोग करें Array.from
:
function foo()
{
foo.bar = Array.from(arguments);
foo.baz = foo.bar.join();
}
foo(1,2,3,4,5,6,7);
foo.bar // Array [1, 2, 3, 4, 5, 6, 7]
foo.baz // "1,2,3,4,5,6,7"
गैर- ES6 कोड के लिए, JSON.stringify और JSON.parse का उपयोग करें:
function foo()
{
foo.bar = JSON.stringify(arguments);
foo.baz = JSON.parse(foo.bar);
}
/* Atomic Data */
foo(1,2,3,4,5,6,7);
foo.bar // "{"0":1,"1":2,"2":3,"3":4,"4":5,"5":6,"6":7}"
foo.baz // [object Object]
/* Structured Data */
foo({1:2},[3,4],/5,6/,Date())
foo.bar //"{"0":{"1":2},"1":[3,4],"2":{},"3":"Tue Dec 17 2013 16:25:44 GMT-0800 (Pacific Standard Time)"}"
foo.baz // [object Object]
यदि परिरक्षण के बजाय संरक्षण की आवश्यकता है, तो आंतरिक संरचित क्लोनिंग एल्गोरिथ्म का उपयोग करें ।
यदि DOM नोड्स पास हैं, तो XMLSerializer का उपयोग किसी असंबंधित प्रश्न के रूप में करें ।
with (new XMLSerializer()) {serializeToString(document.documentElement) }
यदि बुकमार्कलेट के रूप में चल रहा है, तो आपको त्रुटि संरचना में प्रत्येक संरचित डेटा तर्क को लपेटने की आवश्यकता हो सकती है JSON.stringify
ठीक से काम करने के है।
संदर्भ
function
, न कि ES2015 + वसा तीर=>
फ़ंक्शन। उन लोगों के लिए, आप...args
फ़ंक्शन परिभाषा में उपयोग करना चाहते हैं जैसे(...args) => console.log(args)
:।