2016-01-24 6 views
6

मैं इस के माध्यम से पढ़ रहा था: https://github.com/pburtchaell/redux-promise-middleware/blob/master/src/index.jsक्या है ... !! ES6 में वाक्यविन्यास?

मुझे पता है कि ... वस्तु प्रसार के रूप में इस्तेमाल किया जा रहा है। मुझे पता है कि !! किसी भी सत्यता के साथ किसी भी बुलियन में परिवर्तित करने के लिए प्रयोग किया जाता है।

हालांकि यह जानकर उनका क्या मतलब है जब उन्हें ...!! जैसे एक साथ रखा जाता है?

{ 
    ...resolveAction, 
    ...isAction(rejected) ? rejected : { 
    ...!!rejected && { payload: rejected } 
} 
  1. ...resolveAction सिर्फ resolveAction की चाबी फैलता है: मैं मुसीबत यहाँ अंतिम पंक्ति को समझने की है।
  2. ...isAction(rejected) ? जांच करेगा कि rejected कोई कार्रवाई हल करता है और फिर इसे फैलाएगा।
  3. rejected जोड़ने अगर सच
  4. {...!!rejected && { payload: rejected } आपत्ति उठाने (यह एक या तो के बारे में सुनिश्चित नहीं हैं) ????????????????

...!! भी वैध वाक्यविन्यास है?

  1. यह !! पहले लागू किया जाता है कि यह एक बूलियन मान है और यह प्रसार नहीं किया जा सकता है वस्तु पहले, तो !! सब प्रसार कुंजी

  2. पर लागू किया जाएगा फैलता है तो: वहाँ दो विकल्प हैं ।

तो यह कोई मतलब नहीं जो भी पड़ता है, या मैं कुछ क्योंकि उस कोड को देखते हुए याद आ रही है, मैं इसे एक बूलियन मान प्रसार करने के लिए कोशिश कर रहा है मान लेते हैं।

+0

कि रेपो में, 'rejected' एक वस्तु (लाइन 54) है। हो सकता है कि स्प्रेड ऑपरेटर '!!' के संयोजन के साथ वस्तु की प्रत्येक संपत्ति को बदल देता है? – Scott

+1

मेरा अनुमान है, और यह केवल एक अनुमान है क्योंकि मुझे ES6 spec में preendences के बारे में कुछ भी नहीं मिला है, कि '...' की कम प्राथमिकता है इसलिए वास्तव में प्रसार को अस्वीकार कर दिया गया है और {{पेलोड: अस्वीकार} '। तो कोड वास्तव में परीक्षण क्या है कि एक अस्वीकार मूल्य है और यदि इसे 'पेलोड' – nbermudezs

+0

@nbermudezs नामक कुंजी के रूप में पास किया गया है, तो मुझे लगता है कि आप कुछ पर हैं। यदि पहला सत्य है तो एक '&&' दूसरा मान वापस कर देगा, इसलिए वस्तु मूल वस्तु में फैल जाती है। – L3viathan

उत्तर

3

ठीक है तो NPM मॉड्यूल को डाउनलोड करने और transpiled कोड के माध्यम से जाने के बाद मैं लाइन पाया: यदि !!rejected तो सच है

_extends({}, !!rejected && { payload: rejected }) 

असल:

return dispatch(isThunk(rejected) ? rejected.bind(null, resolveAction) : _extends({}, resolveAction, isAction(rejected) ? rejected : _extends({}, !!rejected && { payload: rejected }))); 

जो की प्रासंगिकता का यहाँ है यह ऑब्जेक्ट में पेलोड फैल जाएगा। यदि यह _extends({}, false) नहीं है तो {} लौटाता है।

इस काम की कुंजी यह है कि ... की पूरी लाइन में किसी अन्य ऑपरेटर की तुलना में कम प्राथमिकता है। इस बात को ध्यान में रखते हुए आप इसे समझना शुरू कर सकते हैं।

+0

आपको गाड़ियों के कोड को डी/एल करने की भी आवश्यकता नहीं है। बस अपनी साइट पर बेबेल प्रतिकृति का उपयोग करें। – aarosil

1

प्रासंगिक सवाल What is "x && foo()"?

अजीब वाक्य रचना

{...!!rejected && { payload: rejected }} 

रूप

{ ... ((!!rejected) && { payload: rejected }) } 

दरअसल !! पार्स किया गया है एक बूलियन को rejected डाली है, तो यह वस्तु के लिए मूल्यांकन किया जाता है है जब सच्चाई।एक बेहतर तरीका यह लिखने के लिए होगा

{ ...(rejected ? {payload: rejected} : null) } 

और निश्चित रूप से पूरे भीतरी वस्तु शाब्दिक ज़रूरत से ज़्यादा है। यह सिर्फ हो सकता है

{ 
    ...resolveAction, 
    ...(isAction(rejected) ? rejected : (rejected ? {payload: rejected} : null)) 
} 

(कोष्ठकों को छोड़ आप मनचाहे ढंग से)

+0

उस समय मैंने यह पूछा, मैंने वास्तव में सोचा ... !! कुछ प्रकार का अद्वितीय ऑपरेटर था। मुझे पता था कि क्या && मतलब था, लेकिन यह नहीं पता था कि इसकी प्राथमिकता कितनी कम थी ... यह पता लगाने की कुंजी थी। तो जब यह जवाब सही है, तो यह वास्तव में पूछे जाने वाले चिह्न पर निशान को याद करता है कि "किस क्रम में (...) (!!) और (&&) मूल्यांकन किया गया है" – m0meni

+0

@ एआर 7: मुझे लगता है कि "पार्स किया गया है जैसा कि "पैराग्राफ प्राथमिकता/मूल्यांकन आदेश बताता है, है ना? – Bergi

+0

हाँ मैं वहां आपसे सहमत हूं और कहा "जवाब सही है।" मेरे साथ जारी एकमात्र हिस्सा वह पहला वाक्य है। मुझे पता है कि 'x && foo()' का अर्थ क्या है। यहां चेतावनी यह है कि यह '... !! x && foo()' था, जिसने मुझे भ्रमित कर दिया। – m0meni

संबंधित मुद्दे