2010-11-02 4 views
15

संभव डुप्लिकेट:
What good does zero-fill bit-shifting by 0 do? (a >>> 0)x >>> 0 क्या करता है?

मैं मेरा एक परियोजना में कुछ कार्यात्मक प्रोग्रामिंग अवधारणाओं बाहर की कोशिश कर रहा है और मैं के बारे में Array.prototype.map, जो ES5 में नया है और तरह लग रहा है पढ़ रहा था इस:

Array.prototype.map = function(fun) { 
    "use strict"; 
    if (this === void 0 || this === null) { 
     throw new TypeError(); 
    } 
    var t = Object(this); 
    var len = t.length >>> 0; 
    if (typeof fun !== "function") { 
     throw new TypeError(); 
    } 
    var res = new Array(len); 
    var thisp = arguments[1]; 
    for (var i = 0; i < len; i++) { 
     if (i in t) { 
      res[i] = fun.call(thisp, t[i], i, t); 
     } 
    } 
    return res; 
}; 

कारण है कि यह t.length >>> 0 कर रहा है क्या मैं सोच रहा हूँ है। क्योंकि ऐसा कुछ नहीं लगता है। x >>> 0 //-> x! (जब तक एक्स एक संख्या है, स्पष्ट रूप से)

यह भी ध्यान दें कि मुझे नहीं पता कि बिटटाइम ऑपरेटर कैसे काम करते हैं।

+0

और दूसरों के बहुत सारे http://stackoverflow.com/questions/1822350/ http://stackoverflow.com/questions/1474815/ http://stackoverflow.com/questions/1385491/ http: // stackoverflow.com/questions/3348438/ ये केवल तभी ढूंढना आसान है जब पहला व्यक्ति पाया जा सके> _>। – kennytm

+1

@ केनीटीएम ~ अच्छा डुप्लिकेट यदि आप जानते हैं कि चीजों के नाम क्या हैं ...;) – jcolebrand

उत्तर

21

x >>> 0 0 बिट्स का लॉजिकल (हस्ताक्षरित) दायां-शिफ्ट करता है, जो नो-ऑप के बराबर है। हालांकि, सही बदलाव से पहले, इसे x को एक हस्ताक्षरित 32-बिट पूर्णांक में परिवर्तित करना होगा। इसलिए, x >>> 0 का समग्र प्रभाव x को 32-बिट हस्ताक्षरित पूर्णांक में परिवर्तित कर दिया गया है।

यह सुनिश्चित करता है कि len एक गैर-संख्यात्मक संख्या है।

js> 9 >>> 0 
9 
js> "9" >>> 0 
9 
js> "95hi" >>> 0 
0 
js> 3.6 >>> 0 
3 
js> true >>> 0 
1 
js> (-4) >>> 0 
4294967292 
+0

क्या आप कृपया कुछ बता सकते हैं कि क्यों। लम्बाई 0 से कम होगी? – Patriks

+0

@ प्रातिक और यह 'सच' क्यों होगा? इसके लिए शायद कोई असली दुनिया का कारण नहीं है। लेकिन अगर ऐसा हुआ (दुर्घटना से।), तो यह '.map' तोड़ देगा। उदाहरण कोड: 'Array.prototype.map.call ({लंबाई: -2}, एफ) ' – m93a

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

  • कोई संबंधित समस्या नहीं^_^