javascript - कैसे जुड़ता है() तर्कों के आधार पर विभिन्न परिणाम उत्पन्न करता है?




arrays function (4)

मैं काफी समझ नहीं पा रहा हूं कि नीचे दिया गया () कॉल अलग-अलग परिणाम क्यों देता है, जो प्रदान किए गए तर्क के प्रकार पर निर्भर करता है।

यहाँ मैं क्या पाया:

var test = function() {
  var args = Array.prototype.join.call(arguments,"_");
  return args
};

console.log(test([1,2,3])) // #1: returns 1,2,3
console.log(test(1,2,3)) // #2: returns 1_2_3

ज्वाइन (तर्कों, '_') को देखते हुए, क्या यह उपरोक्त दोनों परीक्षणों में एक सीमांकित स्ट्रिंग का उत्पादन नहीं करना चाहिए? इसके बजाय # 1 कॉमा सीमांकित मान क्यों लौटाता है?


आपके कोड में, आपके पास पहले उदाहरण में केवल एक तर्क है, जो एक सरणी है। एकल तत्व से जुड़ने से कोष्ठक हट जाएंगे:

var test = function() {
  var args = Array.prototype.join.call(arguments,"_");
  return args
};

console.log(test([1,2,3])) // args = [[1,2,3]]
console.log(test(1,2,3)) // args = [1,2,3]

console.log([[1,2,3]].join('_'))
console.log([1,2,3].join('_'))

इसे देखने का एक और तरीका test() तर्क के रूप में एक और सरणी प्रदान करना है: test()

var test = function() {
  var args = Array.prototype.join.call(arguments,"_");
  return args
};

console.log(test([1,2,3], [4,5,6]))


क्योंकि आप एक तर्क पास कर रहे हैं जो एक सरणी है - इसलिए यह इसे एक स्ट्रिंग में परिवर्तित करता है, फिर इसे अन्य तर्कों में शामिल करने का प्रयास करता है (कोई भी नहीं हैं) इसलिए यह सिर्फ स्ट्रिंग लौटाता है।

var test = function() {
  var args = Array.prototype.join.call(arguments, "_");
  return args
};

console.log(test([1, 2, 3]));
console.log(test(1, 2, 3));

यदि केवल एक तर्क पारित हुआ है, तो आप जाँच करके इसे हल कर सकते हैं।

var test = function() {
  var args = arguments.length == 1 ? arguments[0].join("_") : Array.prototype.join.call(arguments, "_");
  return args;
};

console.log(test([1, 2, 3]));
console.log(test(1, 2, 3));


परिणाम अलग है, क्योंकि arguments अलग हैं।

पहली कॉल पर ( test([1,2,3]) , आपके पास एक तर्क है जो एक सरणी है। दूसरे कॉल पर, आपके पास 3 तर्क हैं, प्रत्येक में एक नंबर है।

Array.prototype.join को सरणियों के ऊपर कहा जाता है। यह सरणी में प्रत्येक आइटम को कड़ा कर देगा।

आपके पहले मामले में, आपके तर्क "सरणी" में केवल एक सदस्य है, जो कि एक सरणी है। इस तर्क को कड़ा किया जाएगा। एक सरणी स्ट्रिंगफ़ाइड वही बन जाता है जो आपके कोड में लॉग इन है।


पहला तर्क, पहला तर्क है [1,2,3] जो दूसरे तर्क के साथ जुड़ता है, जो कुछ भी नहीं है -> आउटपुट [1,2,3].toString()

दूसरा कॉल, यह वास्तव में सभी 3 तर्कों में शामिल हो रहा है, जिसके परिणामस्वरूप 1_2_3 आउटपुट 1_2_3





function