2012-03-14 12 views
5
utils.parseColor = function (color, toNumber) { 
    if (toNumber === true) { 
    if (typeof color === 'number') { 
     return (color | 0); //chop off decimal 
    } 
    if (typeof color === 'string' && color[0] === '#') { 
     color = color.slice(1); 
    } 
    return window.parseInt(color, 16); 
    } else { 
    if (typeof color === 'number') { 
     //make sure our hexadecimal number is padded out 
     color = '#' + ('00000' + (color | 0).toString(16)).substr(-6); 
    } 

    return color; 
    } 
}; 

अरे दोस्तों, मुझे कोड का यह टुकड़ा मिलता है। यह जावास्क्रिप्ट में एक उपयोगिता कार्य है जो संख्याओं और तारों के बीच रंगों को आगे और पीछे परिवर्तित करेगा। ऐसे 2 भाग हैं जिनके बारे में मुझे यकीन नहीं है,जावास्क्रिप्ट - कनवर्टिंग रंग (संख्याएं -> तार) इसके विपरीत

पहला, return (color|0); का क्या अर्थ है? | क्या है? जावास्क्रिप्ट में?

दूसरे, लाइन

color = '#' + ('00000' + (color | 0).toString(16)).substr(-6); 

क्यों मुझे यकीन है कि हेक्साडेसिमल संख्या बाहर गद्देदार है बनाने के लिए की जरूरत है में? हम यहां हासिल करने की क्या कोशिश कर रहे हैं?


utils.parseColor(0xFFFF00) की तरह एक हेक्साडेसिमल संख्या के साथ समारोह कॉलिंग, रिटर्न स्ट्रिंग मूल्य: "#ffff00"। एक सीएसएस-शैली हेक्साडेसिमल स्ट्रिंग पास करने से एक ही स्ट्रिंग को असम्बद्ध किया जाता है। फ़ंक्शन भी एक दूसरा, वैकल्पिक, पैरामीटर toNumber स्वीकार करता है, जो true पर सेट होता है, तो एक संख्यात्मक रंग मान देता है। उदाहरण के लिए, utils.parseColor("#FFFF00", true) या utils.parseColor(0xFFFF00, true) पर कॉल करना, दोनों 16776960 नंबर लौटाएं।

धन्यवाद, वेन।

उत्तर

7

| जावास्क्रिप्ट में bitwise है या। इस मामले में, यह सब संख्या को पूर्णांक होने के लिए मजबूर करता है।

बिटवाई या दो नंबर लेता है और उनके सभी बिट्स की तुलना करता है। यदि कोई बिट 1 है, तो परिणाम में 1 है। तो, दो द्विआधारी संख्या 1100 और 1010 को देखते हुए आप निम्नलिखित मिलेगा:

1100 
1010 
---- 
1110 

आप देख सकते हैं, परिणाम हर स्तंभ है कि एक 1. तो | 0मूल्य परिवर्तन नहीं करता है में एक 1 है संख्या का

हालांकि, क्योंकि यह पूर्णांक के द्विआधारी प्रतिनिधित्व के साथ काम करता है, जावास्क्रिप्ट इसे लागू करने से पहले एक पूर्णांक में संख्या बदलता है। इसका मतलब है कि 2.3 | 0 जावास्क्रिप्ट में 2 है।

आपको यह सुनिश्चित करना होगा कि संख्या ठीक से गद्देदार है क्योंकि रंग प्रारूप छह अंकों की अपेक्षा करता है। यही है, #00F000 मान्य है जहां #F000 नहीं है।

जिस तरह से यह काम करता है वह सरल है। मान लें कि आप अपने रंग संख्या के रूप में 34 में गुजरते हैं। 0x22"22" आधार 16. में एक स्ट्रिंग के रूप में है (एक संख्या पर toString(n) करने के लिए कॉल आधार n में संख्या का प्रतिनिधित्व देता है।) यह मान्य रंग क्योंकि रंग (# के बाद छह अंक की जरूरत है सीएसएस आप कर सकते हैं में है नहीं तीन भी है, लेकिन यह महत्वपूर्ण नहीं है)। तो वे क्या करते हैं पहले स्ट्रिंग के रूप में पांच 0 जोड़ते हैं। इसका मतलब है "22""0000022" बन जाता है। अंत में, इस से अंतिम छः वर्ण लें: 000022। (substr को नकारात्मक सूचकांक के साथ स्ट्रिंग के अंत से गिना जाता है।) यह उन्हें एक वैध रंग देता है।

इसलिए, यह सब एक साथ डाल, लाइन

color = '#' + ('00000' + (color | 0).toString(16)).substr(-6); 

के एक समूह के साथ नंबर पर आप में पारित लेता है, (color | 0) साथ एक पूर्णांक में बदल जाता, .toString(16) साथ हेक्साडेसिमल स्ट्रिंग में बदल जाता, पैड यह शून्य, अंतिम पैड किए गए स्ट्रिंग से छः वर्ण लेता है और इसमें # तैयार करता है।

यह वास्तव में इस फ़ंक्शन को लिखने के लिए एक काफी चालाक और सुरुचिपूर्ण तरीका है।

+0

यह उत्तर! अच्छी तरह से किया Tikhon! –

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