जेएस में इस अभिव्यक्ति का क्या अर्थ है?जावास्क्रिप्ट में एक वर्टिकल बार का क्या अर्थ है?
Value |= this.value
जेएस में इस अभिव्यक्ति का क्या अर्थ है?जावास्क्रिप्ट में एक वर्टिकल बार का क्या अर्थ है?
Value |= this.value
यह सी या सी ++ या जावा की तरह द्विआधारी "या" है। इस मामले में, यह अपने असाइनमेंट ऑपरेटर के रूप में प्रयोग किया जाता है, तो
value |= this.value
मतलब यह है कि this.value
और value
32-बिट पूर्णांक में बदल रही हैं, और एक बिटवाइज़ या आपरेशन किया जाता है। यदि value
10 और this.value
ऑपरेशन से पहले 3 थे (यानी 01010
और 011
बाइनरी में) परिणाम 11 (01011
बाइनरी में) होगा।
जावास्क्रिप्ट में बाइनरी लॉजिक ऑपरेटर जावास्क्रिप्ट में उल्लेखनीय हैं क्योंकि यह काम पूर्णांक मानों पर किया जाता है।
"बिट-वार" शब्द शायद "बाइनरी" से अधिक सटीक है। संचालन प्रत्येक संख्यात्मक संख्या के प्रत्येक बिट पर कार्य करते हैं, विशेष रूप से संख्यात्मक मान 32-बिट पूर्णांक पर हस्ताक्षर किए जाते हैं। परिणाम भी एक हस्ताक्षरित 32-बिट पूर्णांक (spec के अनुसार) है।
हालांकि, जावास्क्रिप्ट नंबर "आराम पर" हमेशा 64-बिट बाइनरी फ़्लोटिंग पॉइंट मान होते हैं। इस प्रकार 32 बिट बिट पूर्णांक गणित के साथ गणना की गई बिटवाई ऑपरेटरों के परिणाम, फ़्लोटिंग पॉइंट फॉर्म में संग्रहीत हैं। यह काम करता है क्योंकि 32-बिट पूर्णांक की श्रेणी 64-बिट फ्लोट में आराम से और ठीक से फिट बैठती है।
यह this.value
में बिट्स और बिट्स पहले से ही Value
में संग्रहीत के बीच एक bitwise OR प्रदर्शन करेंगे, तो Value
में वापस परिणाम की दुकान।
var Value = 42; // 00101010
Value |= 96; // 01100000
window.alert(Value); // 01101010 -> 106
यह वास्तव में क्या हो रहा है इसका एक बेहतर उदाहरण है। – vol7ron
यह थोड़ा सा या असाइनमेंट ऑपरेटर है, +=
के समान। आप इस तरह से उस पर एक परीक्षण चलाते हैं:
<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|=y
x=x|y
कह दूसरों है के रूप में रूप में ही है इंगित किया, यह 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 ऑपरेटरों।
डेमो/अधिक fleshed बाहर स्पष्टीकरण के लिए धन्यवाद, मैं अभी भी दो उच्च रेटेड उत्तरों को पढ़ने के बाद वास्तव में समझ में नहीं आया था। –
मैं मानता हूं, यह थोड़ी देर हो गया है क्योंकि मेरे पास बिटवाई ऑपरेशंस के लिए उपयोग-मामला है। डेमो वापस आने के लिए अच्छा है, भले ही आप समझें कि ऑपरेटर क्या है। – vol7ron
कि ऑपरेटर मैं पाया है के लिए कुछ व्यावहारिक उपयोग:
(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;
मुझे उदाहरण पसंद हैं। मुझे नहीं लगता कि मैं समझता हूं कि "जादू" अंत में जादुई कैसे है। मुझे लगता है कि यह पहला मान या '0' होगा, कभी भी' 0px' नहीं होगा। अधिक व्यावहारिक क्या हो सकता है 'कुछ वार | parseInt (someVar) ' – vol7ron
इसलिए यदि "this.value" है "1", "मूल्य" हो जाएगा "1"? – samrockon
ऑपरेशन से पहले 'Value' में क्या है इस पर निर्भर करता है। –
केवल तभी मूल्य 0 या 1. – Margus