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




arrays function (5)

जब आप test करने के लिए एक सरणी पास करते हैं, तो arguments ऑब्जेक्ट सरणी का एक सरणी बन जाता है, न कि सादे मूल्यों का एक सामान्य सरणी। यह अंतर है

arguments = [[1,2,3]];

तथा

arguments = [1,2,3];

जब आप कॉल .join । सरणियों के एक सरणी पर। प्रत्येक आंतरिक सरणी को पहले एक स्ट्रिंग के लिए समान रूप से .join किया जाता है, जिसके परिणामस्वरूप '1,2,3' - आंतरिक सरणियों के मान नहीं मिलते हैं। .join द्वारा .join संस्करण, केवल बाहरी सरणी के तत्काल बच्चों को .join द्वारा .join एड मिलता है।

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

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

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 कॉमा सीमांकित मान क्यों लौटाता है?


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

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

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

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


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

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


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

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]))


पहले उदाहरण में आप कॉल नहीं कर रहे हैं। सरणी पर लेकिन arguments पर। वह चर एक सरणी-जैसी वस्तु से आबाद होगा, जिसमें पहला सूचकांक के रूप में एक सरणी है, संक्षेप में, आप इसके बराबर कॉल कर रहे हैं:

let myArguments = [[1, 2, 3]];

console.log(myArguments.join("_"));

इसके बजाय आप दूसरे उदाहरण में क्या करते हैं (समतुल्य):

let myArguments = [1, 2, 3];

console.log(myArguments.join("_"));





function