2010-10-26 25 views

回答

14

它是二進制的「或」,就像在C或C++或Java中一樣。在這種情況下,在其賦值操作符表單的使用,所以

value |= this.value 

意味着this.valuevalue都轉換爲32位整數,並且執行按位或運算。如果value爲10,並且this.value在操作前爲3(即,二進制中的01010011),則結果將是11(二進制中的01011)。

Javascript中的二進制邏輯運算符在Javascript中值得注意,因爲工作是在整數值上進行的。

術語「按位」可能比「二進制」更準確。這些操作對數值的每一位都起作用,特別是強制爲有符號32位整數的數值。結果也是一個有符號的32位整數(根據規範)。

但是,JavaScript數字「靜止」始終是64位二進制浮點值。因此,按位運算符的結果雖然是用32位整數數學計算的,但是以浮點形式存儲。這是有效的,因爲32位整數的範圍很適合64位浮點。

+0

因此,如果 「THIS.VALUE」 爲 「1」, 「價值」 會「1」? – samrockon 2010-10-26 14:04:28

+0

取決於操作前的「價值」內容。 – 2010-10-26 14:07:19

+0

僅當值爲0或1時 – Margus 2010-10-26 14:07:32

21

這將執行this.value比特和已被存儲在所述Value比特之間的bitwise OR,然後將結果存儲回Value

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

這是實際發生的一個更好的例子。 – vol7ron 2013-05-26 17:53:58

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|=y是等於說x=x|y

10

正如其他有指出,這是一個按位或運算符。然而,我不認爲人們在Javascript中使用它的數值太多 - 通常情況下 - 你不會在Javascript中做很多計算。爲了讓您更好地瞭解此操作符爲何有用,請考慮用戶需要填寫多個文本字段中的至少一個的更常見的情況。

說你有這樣的HTML:

<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" /> 

用戶必須填寫多個電話號碼的選項,但必須提供至少一個。

(在這種情況下與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如果所有輸入字段都只會是真實的一個值。

如果至少一個字段是必須要填寫,但不超過一個你可以使用XOR運算符:

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

那些是,在我看來,在現實世界使用的Javascript中的按位運算符。

+0

感謝演示/更加充實的解釋,我在閱讀兩個更高評分的答案後仍然不太明白。 – 2012-05-05 14:54:00

+0

我同意,自從我有一個用於按位操作的用例,已經有一段時間了。演示很好回來,即使你瞭解運營商是什麼。 – vol7ron 2013-05-26 17:26:07

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」。更可行的是'someVar | parseInt函數(someVar)' – vol7ron 2013-05-26 18:40:15

相關問題