2015-11-24 15 views
16

में ऑपरेटर बनाम शेष पैरामीटर फैलाएं मैं ES125 में rest parameter में spread operator के बारे में उलझन में हूं। क्या कोई उचित उदाहरण के साथ उनके बीच अंतर समझा सकता है?ES2015/es6

+3

एक कॉल साइट पर है, दूसरा पैरामीटर सूची में है। या सरणी के लिए, एक शाब्दिक में है, दूसरा एक विनाशकारी अभिव्यक्ति में है। – Bergi

+0

क्या कोई यह समझा सकता है कि यह क्यों कम हो गया है? –

+2

शायद किसी भी शोध प्रयास के कारण। साथ ही, आपको उन शर्तों को कहां मिला, जहां वे इतने बुरे थे कि उन्होंने कितना बुरा समझाया कि आप अंतर नहीं बता सकते हैं? – Bergi

उत्तर

52

प्रसार का उपयोग करते समय, आप और अधिक में एक भी चर विस्तार कर रहे हैं:

var abc = ['a', 'b', 'c']; 
 
var def = ['d', 'e', 'f']; 
 
var alpha = [ ...abc, ...def ]; 
 
console.log(alpha)// alpha == ['a', 'b', 'c', 'd', 'e', 'f'];

बाकी तर्कों का उपयोग करते हैं, तो आप एक सरणी में एक समारोह के सभी शेष तर्क टूट रहे हैं:

function sum(first, ...others) { 
 
    for (var i = 0; i < others.length; i++) 
 
     first += others[i]; 
 
    return first; 
 
} 
 
console.log(sum(1,2,3,4))// sum(1, 2, 3, 4) == 10;

+0

'const [a, b, ... c के बारे में क्या है ] = [1, 2, 3, 4, 5, 6, 7, 8, 9] '? –

21

ES6 नई सुविधा तीन बिंदुओं ...

यहाँ कैसे हम इन बिंदुओं का उपयोग कर सकते है:

आराम/कलेक्टर के रूप में/इकट्ठा

var [c, ...m] = [1,2,3,4,5]; // m -> [2,3,4,5] 

यहाँ ...m एक कलेक्टर है, यह बाकी पैरामीटर एकत्र करता है। आंतरिक रूप से जब हम लिखें:

var [c, ...m] = [1,2,3,4,5]; जावास्क्रिप्ट, इसलिए उसके तत्वों के सभी assing के रूप में other

को ...params फैलता

var c = 1, 
    m = [2, 3, 4, 5]; 

निम्नलिखित है प्रसार के रूप में

var params = [ "hello", true, 7 ]; 
var other = [ 1, 2, ...params ]; // other => [1,2,"hello", true, 7] 

यहाँ

आंतरिक रूप से जावास्क्रिप्ट

var other = [1, 2].concat(params); 

आशा करता है कि इससे मदद मिलती है।

+0

अब तक मैंने देखा है सबसे समझदार और सरल व्याख्या। – Robert

+0

बहुत अच्छी तरह समझाया गया ... –

0

मूल रूप से अजगर की तरह:

>>> def func(first, *others): 
... return [first, *others] 
>>> func('a', 'b', 'c') 
['a', 'b', 'c'] 
0

जब हम कोड में देख "...", यह या तो बाकी पैरामीटर या प्रसार ऑपरेटर है।

एक आसान तरीका उन दोनों के बीच भेद करने के लिए नहीं है:

जब ... समारोह मापदंडों के अंत में है, यह "बाकी पैरामीटर" है और सरणी में सूची के बाकी बटोरता। जब ... फ़ंक्शन कॉल या समान रूप से होता है, इसे "स्प्रेड ऑपरेटर" कहा जाता है और सूची में सरणी का विस्तार करता है। पैटर्न का प्रयोग करें:

बाकी पैरामीटर का उपयोग उन कार्यों को बनाने के लिए किया जाता है जो तर्कों को स्वीकार करते हैं। स्प्रेड ऑपरेटर का उपयोग कार्यों के लिए सरणी को पास करने के लिए किया जाता है, जो आमतौर पर कई तर्कों की एक सूची की आवश्यकता होती है।साथ में वे सूची और आसानी से पैरामीटर की एक सरणी के बीच यात्रा करने में सहायता करते हैं। इस click here