2010-10-26 12 views

उत्तर

14

यह सी या सी ++ या जावा की तरह द्विआधारी "या" है। इस मामले में, यह अपने असाइनमेंट ऑपरेटर के रूप में प्रयोग किया जाता है, तो

value |= this.value 

मतलब यह है कि this.value और value 32-बिट पूर्णांक में बदल रही हैं, और एक बिटवाइज़ या आपरेशन किया जाता है। यदि value 10 और this.value ऑपरेशन से पहले 3 थे (यानी 01010 और 011 बाइनरी में) परिणाम 11 (01011 बाइनरी में) होगा।

जावास्क्रिप्ट में बाइनरी लॉजिक ऑपरेटर जावास्क्रिप्ट में उल्लेखनीय हैं क्योंकि यह काम पूर्णांक मानों पर किया जाता है।

"बिट-वार" शब्द शायद "बाइनरी" से अधिक सटीक है। संचालन प्रत्येक संख्यात्मक संख्या के प्रत्येक बिट पर कार्य करते हैं, विशेष रूप से संख्यात्मक मान 32-बिट पूर्णांक पर हस्ताक्षर किए जाते हैं। परिणाम भी एक हस्ताक्षरित 32-बिट पूर्णांक (spec के अनुसार) है।

हालांकि, जावास्क्रिप्ट नंबर "आराम पर" हमेशा 64-बिट बाइनरी फ़्लोटिंग पॉइंट मान होते हैं। इस प्रकार 32 बिट बिट पूर्णांक गणित के साथ गणना की गई बिटवाई ऑपरेटरों के परिणाम, फ़्लोटिंग पॉइंट फॉर्म में संग्रहीत हैं। यह काम करता है क्योंकि 32-बिट पूर्णांक की श्रेणी 64-बिट फ्लोट में आराम से और ठीक से फिट बैठती है।

+0

इसलिए यदि "this.value" है "1", "मूल्य" हो जाएगा "1"? – samrockon

+0

ऑपरेशन से पहले 'Value' में क्या है इस पर निर्भर करता है। –

+0

केवल तभी मूल्य 0 या 1. – Margus

21

यह this.value में बिट्स और बिट्स पहले से ही Value में संग्रहीत के बीच एक bitwise OR प्रदर्शन करेंगे, तो Value में वापस परिणाम की दुकान।

var Value = 42; // 00101010 
Value |= 96;  // 01100000 
window.alert(Value); // 01101010 -> 106 
+0

यह वास्तव में क्या हो रहा है इसका एक बेहतर उदाहरण है। – vol7ron

3

यह थोड़ा सा या असाइनमेंट ऑपरेटर है, += के समान। आप इस तरह से उस पर एक परीक्षण चलाते हैं:

<ol> 
<script language="javascript"> 
var x=false; 
document.writeln("<li>"+x+"</li>"); 
x|=true; 
document.writeln("<li>"+x+"</li>"); 
x&=false; 
document.writeln("<li>"+x+"</li>"); 
</script> 
</ol> 

आप इस निर्गम (IE में) मिल जाएगा

1.false 
2.1 
3.0 

अनिवार्य रूप से, x|=yx=x|y

10

कह दूसरों है के रूप में रूप में ही है इंगित किया, यह bitwise या ऑपरेटर है। हालांकि, मुझे नहीं लगता कि लोग जावास्क्रिप्ट में संख्यात्मक मूल्यों पर इसका अधिक उपयोग करते हैं - आम तौर पर - आप जावास्क्रिप्ट में बहुत अधिक गणना नहीं करते हैं। आपको एक बेहतर विचार देने के लिए कि यह ऑपरेटर उपयोगी क्यों है, उस सामान्य परिदृश्य पर विचार करें जिसे उपयोगकर्ता को कम से कम एक टेक्स्टफील्ड में भरना होगा।

<input type="text" class="phone-nr" id="home-phone-nr-1" /> 
<input type="text" class="phone-nr" id="home-phone-nr-2" /> 
<input type="text" class="phone-nr" id="home-phone-nr-3" /> 
<input type="text" class="phone-nr" id="mobile-phone-nr-1" /> 
<input type="text" class="phone-nr" id="mobile-phone-nr-2" /> 
<input type="text" class="phone-nr" id="mobile-phone-nr-3" /> 

उपयोगकर्ता से अधिक फ़ोन नंबर में भरने का विकल्प है, लेकिन कम से कम एक प्रदान करना होगा:

आप इस HTML है कहो।

(इस मामले में jQuery के साथ) यह करने के लिए सबसे आसान तरीका है: अगर वर्ग phone-nr साथ कम से कम एक इनपुट क्षेत्र एक गैर खाली मान है

var valid = false; 
$('.phone-nr').each(function(i, item){ 
    valid |= $(item).val(); 
}); // untested code 

valid सच हो जाएगा।

हर क्षेत्र चाहिए में (एक अधिक सामान्य आवश्यकता) भरा जा यदि आप बिटवाइज़ और ऑपरेटर के साथ इस तरह यह कर सकते हैं:

var valid = true; 
$('.phone-nr').each(function(i, item){ 
    valid &= $(item).val(); 
}); // untested code 

valid ही सच्चा हो सकता है अगर सभी इनपुट फ़ील्ड है एक कीमत।

var valid = false; 
$('.phone-nr').each(function(i, item){ 
    valid ^= $(item).val(); 
}); // untested code 

उन कर रहे हैं, मेरी राय में, वास्तविक दुनिया के उपयोग करता है:

कम से कम एक क्षेत्र में में भरे जाने वाले की आवश्यकता है, लेकिन कोई एक से अधिक आप XOR ऑपरेटर का उपयोग कर सकते हैं जावास्क्रिप्ट में bitwise ऑपरेटरों।

+0

डेमो/अधिक fleshed बाहर स्पष्टीकरण के लिए धन्यवाद, मैं अभी भी दो उच्च रेटेड उत्तरों को पढ़ने के बाद वास्तव में समझ में नहीं आया था। –

+0

मैं मानता हूं, यह थोड़ी देर हो गया है क्योंकि मेरे पास बिटवाई ऑपरेशंस के लिए उपयोग-मामला है। डेमो वापस आने के लिए अच्छा है, भले ही आप समझें कि ऑपरेटर क्या है। – vol7ron

7

कि ऑपरेटर मैं पाया है के लिए कुछ व्यावहारिक उपयोग:

(3|0) === 3;    // целые числа не изменяет 
(3.3|0) === 3;   // у дробных чисел отбрасывает дробную часть 
(3.8|0) === 3;   // не округляет, а именно отбрасывает дробную часть 
(-3.3|0) === -3;   // в том числе и у отрицательных дробных чисел 
(-3.8|0) === -3;   // у которых Math.floor(-3.3) == Math.floor(-3.8) == -4 
("3"|0) === 3;   // строки с числами преобразуются к целым числам 
("3.8"|0) === 3;   // при этом опять же отбрасывается дробная часть 
("-3.8"|0) === -3;  // в том числе и у отрицательных дробных чисел 
(NaN|0) === 0;   // NaN приводится к нулю 
(Infinity|0) === 0;  // приведение к нулю происходит и с бесконечностью, 
(-Infinity|0) === 0;  // и с минус бесконечностью, 
(null|0) === 0;   // и с null, 
((void 0)|0) === 0;  // и с undefined, 
([]|0) === 0;   // и с пустым массивом, 
([3]|0) === 3;   // но массив с одним числом приводится к числу, 
([-3.8]|0) === -3;  // в том числе с отбрасыванием дробной части, 
([" -3.8 "]|0) === -3; // и в том числе с извлечением чисел из строк, 
([-3.8, 22]|0) === 0  // но массив с несколькими числами вновь зануляется 
({}|0) === 0;    // к нулю также приводится пустой объект 
({'2':'3'}|0) === 0;   // или не пустой 
((function(){})|0) === 0; // к нулю также приводится пустая функция 
((function(){ return 3;})|0) === 0; 

और कुछ जादू मेरे लिए:

3 | '0px' === 3; 
+1

मुझे उदाहरण पसंद हैं। मुझे नहीं लगता कि मैं समझता हूं कि "जादू" अंत में जादुई कैसे है। मुझे लगता है कि यह पहला मान या '0' होगा, कभी भी' 0px' नहीं होगा। अधिक व्यावहारिक क्या हो सकता है 'कुछ वार | parseInt (someVar) ' – vol7ron

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