这个表达在JS中意味着什么?
Value |= this.value
答案 0 :(得分:23)
这将在this.value
中的位与已存储在Value
中的位之间执行bitwise OR,然后将结果存储回Value
。
var Value = 42; // 00101010
Value |= 96; // 01100000
window.alert(Value); // 01101010 -> 106
答案 1 :(得分:14)
它是二进制“OR”,就像在C或C ++或Java中一样。在这种情况下,它在其赋值运算符形式中使用,所以
value |= this.value
表示this.value
和value
都转换为32位整数,并执行按位OR运算。如果value
为10且this.value
在操作之前为3(即二进制为01010
和011
),则结果为11(二进制为01011
)。
Javascript中的二进制逻辑运算符在Javascript中值得注意,因为工作是在整数值上执行的。
术语“逐位”可能比“二进制”更准确。操作作用于数值的每个位,特别是强制转换为带符号的32位整数的数值。结果也是一个带符号的32位整数(根据规范)。
但是,“静止”的JavaScript编号始终是64位二进制浮点值。因此,虽然使用32位整数数学计算,但按位运算符的结果以浮点形式存储。这是有效的,因为32位整数的范围可以在64位浮点中舒适而精确地拟合。
答案 2 :(得分:12)
正如其他人所指出的,这是按位OR运算符。但是,我不认为人们在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)是:
var valid = false;
$('.phone-nr').each(function(i, item){
valid |= $(item).val();
}); // untested code
如果至少有一个类valid
的输入字段具有非空值,则 phone-nr
将为true。
如果每个字段必须填写(更常见的要求),您可以使用按位AND运算符执行此操作:
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中按位运算符的真实用法。
答案 3 :(得分:10)
我发现该运营商的一些实际用途:
( 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;
答案 4 :(得分: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