পিএইচপি-তে আছে func_num_args
এবং func_get_args
, জাভাস্ক্রিপ্টের জন্য কি একই রকম কিছু রয়েছে?
পিএইচপি-তে আছে func_num_args
এবং func_get_args
, জাভাস্ক্রিপ্টের জন্য কি একই রকম কিছু রয়েছে?
উত্তর:
আর্গুমেন্ট হয় একটি অ্যারের মত বস্তু (প্রকৃত অ্যারে)। উদাহরণ ফাংশন ...
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/ জাভা স্ক্রিপ্ট / রেফারেন্স / ফাংশন_ এবং_ফ্যানশন_স্কোপ / বিভাগসমূহ
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);
মজিলা এমডিএন থেকে :
আপনার যুক্তিগুলিতে টুকরো টুকরো করা উচিত নয় কারণ এটি জাভাস্ক্রিপ্ট ইঞ্জিনগুলিতে অপ্টিমাইজেশন প্রতিরোধ করে (উদাহরণস্বরূপ V8)।
function foo() { foo.bar = JSON.stringify(arguments); foo.baz = JSON.parse(foo.bar); }
পরিবর্তে সংরক্ষণের প্রয়োজন হলে অভ্যন্তরীণ কাঠামোগত ক্লোনিং অ্যালগরিদম ব্যবহার করুন । যদি ডিওএম নোডগুলি পাস হয়ে যায় তবে কোনও সম্পর্কযুক্ত প্রশ্নের মতো এক্সএমএলসিরাইজার ব্যবহার করুন । 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"
নন-ইএস code কোডের জন্য, 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]
স্ট্রিংফিকেশনের পরিবর্তে যদি সংরক্ষণের প্রয়োজন হয় তবে অভ্যন্তরীণ কাঠামোগত ক্লোনিং অ্যালগরিদম ব্যবহার করুন ।
যদি ডিওএম নোডগুলি পাস হয়ে যায় তবে কোনও সম্পর্কযুক্ত প্রশ্নের মতো এক্সএমএলসিরাইজার ব্যবহার করুন ।
with (new XMLSerializer()) {serializeToString(document.documentElement) }
বুকমার্কলেট হিসাবে চলতে থাকলে, JSON.stringify
সঠিকভাবে কাজ করার জন্য আপনাকে প্রতিটি কাঠামোগত ডেটা যুক্তিটি একটি ত্রুটিযুক্ত কনস্ট্রাক্টরে মোড়ানো দরকার হতে পারে ।
তথ্যসূত্র
function
Sতিহ্যবাহী জাভাস্ক্রিপ্টের জন্য কাজ করে , ES2015 + ফ্যাট অ্যার=>
ফাংশন নয়। তাদের জন্য, আপনি ব্যবহার ওয়ানা করব...args
তাই মত ফাংশন সংজ্ঞা:(...args) => console.log(args)
।